SSH无密码登录远端主机是通过非对称密钥认证方式实现的。假设A主机要用SSH登录B主机,需要在A主机上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到B主机上。当A通过SSH连接B时,B就会生成一个随机数并用A的公钥对随机数进行加密,并发送给A。A收到加密数之后再用私钥解密,并将解密数回传给B,B确认解密数无误之后就允许A进行连接了。省去了输入密码的过程。
要实现无密码登录需要有ssh和rsync两个服务,没有这两个服务可以通过apt-get或者yum联网下载。
步骤图片中有两个主机:gpf-Thinkpad-X31和pve3,gpf-Thinkpad-X31即表示上面提到的A主机,pve3表示B主机,具体操作步骤如下:
1. 在主机A中输入ssh-keygen –t rsa –P ''''。 这条命是生成无密码密钥对,询问其保存路径时直接回车采用默认路径,也可自定义输出路径。该命令生成的密钥对:id_rsa和id_rsa.pub,默认存储在~/.ssh目录下。
2. 查看~/.ssh目录中文件如下。id_rsa为私钥文件,id_rsa.pub为公钥文件。
3. 在A主机中把id_rsa.pub追加到授权的key里面去。命令为:cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
产生的authorized_keys 文件必须具有读和写的权限,如上图所示,如果没有这样的权限,可按如下命令更改:chmod 600 ~/.ssh/authorized_keys
4. 在主机A用root用户修改/etc/ssh/sshd_config文件的内容,使其无密码登录有效。更改的结果如下图所示。(该文件中#开头表示该行为注释,将下面三行的注释去掉并修改成如下值即可)
5. 设置完之后使用service sshd restart命令重启SSH服务,才能使刚才设置有效。
6. 将A主机产生的id_rsa.pub文件复制到B主机当中。若A主机中有scp命令可以用该命令复制文件,格式为 scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP或主机名:目录位置。若无scp命令可采用传统方法拷贝文件。
7. 在B主机的用户目录下建立 .ssh文件夹,并修改使其具有读、写和执行权限(必须要有的)。并将从A主机拷贝的公钥追加写入.ssh文件夹中的authorized_keys文件当中,并使authorized_keys文件具有读和写的权限。(此处我已经建立了.ssh目录和authorized_keys文件,因此没有显示相关操作步骤)
8. 完成上述步骤后可从A主机用SSH登录B主机查看效果。
可以看到不需要输入密码即可登录。
需要注意的一点是:我的实验中主机A、B均在root用户下操作,也就是说A主机只有在root用户下远程登录B主机的root用户才可以实现无密码登录。因此,如果要实现A主机的m用户可以远程登录B主机的n用户,则对A主机的操作要在m用户下完成,B主机要做要在n用户下完成。