ssh连接需要验证用户身份,通常情况下使用本机的用户密码。当需要实现自动连接时,手工输入密码显然是不可行的,那么我们可以使用密钥方式

远程主机(client)生成一对密钥,将公钥分发给主机(server),当client连接server时,client使用私钥产生凭证(签名包括了client的身份信息)发送给server,server接受后使用公钥解密验证

注意,签名是基于用户的,并且是单向的。不同的用户要生成自己的密钥对,若要实现双向互访,主机间需要拥有对方的公钥

server间实现SSH无密码互访(集群中常用)是将所有server的公钥文件汇总并发布到每台server,进而实现server间的自由互访

1.生成SSH密钥对

ssh-keygen         //此命令在用户的主目录下建立.ssh目录,并产生id_rsa和id_rsa.pub文件,分别是由RSA算法生成的私钥和公钥文件,可以使用-t参数指定其他算法,注意生成密钥的时候不要给密钥添加密码,否则每次连接会提示输入密钥密码(不是用户密码)

每台server均执行此操作

2.将公钥文件汇总

cp ~/.ssh/id_rsa.pub    ~/.ssh/authorized_keys                 //建立汇总公钥文件,注意文件名

ssh server_ip cat ~/.ssh/id_ras.pub >> ~/.ssh/authorized_keys           //将所有server的公钥文件追加到汇总公钥文件中去


3.分发汇总公钥文件

scp ~/.ssh/authorized_keys  server_ip:~/.ssh/authorized_keys


plus:以上2,3步可用ssh-copy-id代替,此命令无选项情况下将本机~/.ssh/id_rsa.pub追加到远程主机的.ssh/authorized_keys中去(如果远程主机没有此目录或文件,则自动创建),可以使用-i选项指定公钥文件

ssh-copy-id server_ip


4.测试

ssh  server_ip  date

不提示输入密码直接显示远程server的时间表示成功