共计 2382 个字符,预计需要花费 6 分钟才能阅读完成。
经常在服务器程序 (脚本) 里面,或在命令行中,执行 ssh,scp 命令,会碰到要求密码的情况,很不方便!
如果在两台相互信任,其实步骤挺简单,假设要从主机 1 上执行,ssh,scp 操作。
- 主机 1:host1 用户 1:user1
- 主机 2:host2 用户 2:user2
一: 在主机 1 上执行下列操作:
1./home/user1/.ssh/ 目录下,执行:ssh-keygen –t id_rsa
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
/home/user1/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
12:a5:55:cc:1e:59:34:61:a2:41:ce:92:5a:a8:9d:ed user1@host1
2. 一路默认回车,生成 id_rsa.pub 文件
3.cat id_rsa.pub >> authorized_keys
二: 在主机 2 上执行下列操作:
1. 拷贝主机 1 上的 authorized_keys 文件到 /home/user2/.ssh/ 目录下。
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwvAv1SKPIkO2ucdmuz13RkVvSuZRKg/FGllbje/a2fDG2AYSdSKQSqe3GO/40YzA3BnVwBEY+cOKbTj9gpVWLf7bi1jZBDokeO3TWdQnzLfOObA4+F3EunwruyqekLTkAEpmoM400ndqmV5VGi1uvRl8gFgVes6pGkZAorzPll7vCCX4DC1R9XK8/VmtLm7Z4egR/UkPoiA9t7u/K3tdjn28DhPSEWnV1ggZZ30DxB14Mtw0+ZjP5joTISFXVBVDxbuUiibuS+2TmjVM3i20Ep1LTfzwFwYBbSGbReRIdowGsCaFK9zs6WIY84SRWR/mvIJOZQhbU1N/dQSnHobICQ== user1@host1
2. 更改目录访问权限:chmod 755 ~/.ssh/
三: 最后在主机 1 上执行:
1. ssh user2@host2
2. scp user2@host2:/var/log/*.* .
就不需要输入密码了。
NOTE:
首先 ssh-keygen -t rsa 命令生成了一个密钥和一个公钥, 而且密钥可以设置自己的密码。可以把密钥理解成一把钥匙, 公钥理解成这把钥匙对应的锁头,把锁头 (公钥) 放到想要控制的 server 上, 锁住 server, 只有拥有钥匙 (密钥) 的人, 才能打开锁头, 进入 server 并控制。而对于拥有这把钥匙的人, 必需得知道钥匙本身的密码, 才能使用这把钥匙 (除非这把钥匙没设置密码), 这样就可以防止钥匙被了配了 (私钥被人复制)。当然, 这种例子只是方便理解罢了, 拥有 root 密码的人当然是不会被锁住的, 而且不一定只有一把锁(公钥), 但如果任何一把锁, 被人用其对应的钥匙(私钥) 打开了, server 就可以被那个人控制了。
所以说, 只要你曾经知道 server 的 root 密码, 并将有 root 身份的公钥放到上面, 就可以用这个公钥对应的私钥 ” 打开 ”server, 再以 root 的身分登录, 即使现在 root 密码已经更改!
如果想控制 n 个机器, 那就需要 n 对钥匙(密钥和公钥), ssh-keygen 命令可以随意更改钥匙对的名字, 最好取容易识别的文件名,比如:
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.10.1
……
这样私钥和公钥的名字分别就是:
id_rsa_192.168.10.1 和 id_rsa_192.168.10.1.pub
然后将 id_rsa_192.168.0.1.pub 文件的内容, 追加到服务器的~/.ssh/authorized_keys 文件中,
最后, 在本地用 ssh 命令的 -i 参数指定本地密钥, 并登录:
# ssh -i /root/.ssh/id_rsa_192.168.10.1 192.168.10.1
如果密钥设置了密码, 就用密钥的密码登录, 没设密码, 就直接登录进去了。scp 也是一样。
通过配置 SSH 深刻理解 Puppet 的语法及工作机制 http://www.linuxidc.com/Linux/2013-07/87882.htm
Ubuntu 下 SSH 安装或设置 http://www.linuxidc.com/Linux/2013-07/87368.htm
SUSE 启用 SSH 和 FTP http://www.linuxidc.com/Linux/2010-08/28286.htm
使用 SSH 客户端登陆 Linux 之后出现乱码的解决方案 http://www.linuxidc.com/Linux/2010-08/28141.htm
详解 Linux 中 SSH 远程访问控制 http://www.linuxidc.com/Linux/2013-07/88048.htm