两台服务器之间scp也好,pssh也好,每一次互相传输文件或者远距离控制都要输入对方账号对应的密码,这是一个很麻烦很讨厌的事儿。这么麻烦又讨厌的事儿应该怎么避免呢?这就是ssh的信任登陆。


假设A与B是两台服务器,其中A是server,B是client。A是发起ssh请求的一方,B是接收ssh请求的一方。


在A机器上,# ssh-keygen -t dsa,这一步是生成一个ssh的共/私密匙对。回车之后,会出现如下的信息:

Generating public/private dsa key pair.

Enter file in which to save the key (/root/.ssh/id_dsa): 这一步,是选择保存密匙的目录,直接回车就行

Enter passphrase (empty for no passphrase): 这一步是询问这个信任关系是否需要密码,如果是过的硬的关系,自然不需要密码的,所以继续回车

Enter same passphrase again:对上一步进行确认,三联回车,然后就是这样,不但生成了“key指纹”还生成了一个图案。

wKioL1cPsteBsBB-AABIkcjMw6Q331.png

然后来到/root/.ssh里,就会发现多了两个文件:id_dsa 和 id_dsa.pub,其中id_dsa.pub是需要给B服务器的。这样一个钥匙一式两份,A一份B一份,两个是一对所以就这样建立了信任关系。


在B服务器输入 #scp A的ip地址:/root/.ssh/id_dsa.pub /root/.ssh,这样就把A服务器的id_dsa.pub文件拽到自己的/root/.ssh文件夹里,然后#mv id_dsa.pub authorized_keys ,如果改名叫authorized_keys2 的话,就是通过SSH2的方式连接。


现在A与B之间就建立了ssh信任关系,注意!目前这个信任关系是单向的,即A找B的root用户(文件在/root文件下)要文件,是不需要B的 root用户密码,如果B反过来找A要文件的话,还是要A的密码的。


改完之后,别忘了确认authorized_keys 的chmod 是644。


要是对方机器把authorized_keys删除掉,那么scp或者pssh的话就恢复要密码的环节了。linux历史连接信息在/var/log/secure中。


ssh采用公钥要比使用密码登录安全许多倍!!!所以这种方法要大力推广!!!


无法建立信任关系时排错步骤

1.AB主机名是默认的Localhost,如果AB之间的主机名相同,可能会导致无法成功。要修改主机名用hostname 命令,修改/etc/sysconfig/network,then restart your server.

2.查看SSH配置文件/etc/ssh/ssh_config,找到IdentityFile所指定的文件是什么,有的不是默认的id_rsa,这里指定的文件要和第一部分生成的文件名要相同,这里是id_rsa.

请检查/etc/ssh/sshd_config 里面是否设置Allowusers了。

3.查看B机authorized-keys的文件权限是否为600或者644 (linux文件权限详解),如直接在server机器上vi或touch建立文件authorized_keys,可能会导致信任关系无法建立。

(实践证明:如果是root之间建信任,直接644就ok,如果是非root用户,644权限是不行的。必须要改成700,600好像也行)

4.查看/var/log/secure日志,里面应该有一些蛛丝马迹可以供你参考

  

ssh-copy-id 的缺憾

ssh-copy-id有一个很要命的问题,那就是缺省它仅仅支持SSH运行在22端口的情况,不过实际上出于安全的需要,我们往往都会更改服务器的SSH端口,比如说改成10022端口,这时候你运行ssh-copy-id就会报错了,直接修改ssh-copy-id脚本当然可以修正这个问题,但是那样显得太生硬了,实际上还有更好的办法:

[注: ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上.]

# vi ~/.ssh/config 加上内容: Host server Hostname ip Port 10022 你也可以单独只加入Port一行配置,那样就是一个全局配置,保存后再运行ssh-copy-id命令就不会报错了。 


补充:经网友提示,如果端口不是22,不修改config文件,按如下方式也可以: ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 10022 user@server"

附:

# ssh-keygen

# cat ~/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"


参考资料:http://www.dongwm.com/archives/%E5%85%B3%E4%BA%8Essh%E5%91%BD%E4%BB%A4%E7%A0%94%E7%A9%B6%E4%BB%A5%E5%8F%8Assh%E4%BF%A1%E4%BB%BB%E8%AF%A6%E8%A7%A3/