简单来说,就是通过ssh-keygen -t rsa命令来产生一组公私钥,私钥是id_rsa,公钥是id_rsa.pub,把公钥上传到另一台服务器对应账号的.ssh/authorized_keys,即可实现免密码登录到另一台服务器上。
1.ssh的登录方式
1.1 密码口令
- 客户端连接上服务器之后,服务器把自己的公钥传给客户端
- 客户端输入服务器密码通过公钥加密之后传给服务器
- 服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录
1.2 公钥认证
这个其实比上面的要简单,之前上大学时老师也讲过。一定要明白客户端和服务端时通过公钥和私钥实现认证登录的。一定要牢牢记住就是只靠这两个东西,没有其他的了。
拿自动化部署举例,Rundeck部署在一台服务器上现在要对其他的一台或者多台部署服务器进行项目部署,在这个场景下Rundeck对应的服务器要想去访问其他的部署服务器就要通过公私钥的这种方式。
Rundeck服务器相当于A端,而部署服务器相当于B端。A、B两端要实现交互认证就要通过一组公私钥。
1、客户端即A端生成RSA公钥和私钥:
一般在用户的根目录新建一个.ssh/.文件夹,在文件夹中通过ssh-keygen -t rsa命令来产生一组公私钥。
如下图所示id_rsa为私钥,id_rsa.pub为公钥。
2、客户端将自己的公钥存放到服务器:在生成了公私钥之后要实现AB两端的交互认证,这两个文件肯定不能只放到A端,当然也需要在B端(服务器端)做一下登记,我们自己(A端)保留自己的私钥,然后把公钥id_rsa.pub存放到B端(一般是在用户根目录下的.ssh/目录下)
在服务器端(B端)的.ssh/目录下还会有authorized_keys+know_hosts,这两个文件。
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥,上面提到的A端在生成自己的公私钥之后,将公钥追加到authorized_keys文件后面。
红色框起来的为新追加的A端的公钥。
know_hosts : 已知的主机公钥清单,这个作为A端和B端都会自动生成这个文件,每次和远端的服务器进行一次免密码ssh连接之后就会在这个文件的最后追加对方主机的信息(不重复)
每进行一次就会在这个文件中自动的追加新的主机信息
通过scp将内容写到对方的文件中
命令:scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys
也可以分解为一下两步来进行:
$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key //将文件拷贝至远程服务器
$ cat ~/pub_key >>~/.ssh/authorized_keys //将内容追加到authorized_keys文件中, 不过要登录远程服务器来执行这条命令
网上很多都是用scp >>去追加,如果你可以登录到B端的话其实直接复制过去就可以了。
需要注意的几点:
设置文件和目录权限(服务器端即B端的权限):
设置authorized_keys权限
$ chmod 600 authorized_keys
设置.ssh目录权限
$ chmod 700 -R .ssh
到这里我们的配置工作就结束了!!!
进行连接认证:
ssh root@222.73.156.133 -p1019
nsycn备份:rsync -avz -e 'ssh -p22222' /home/testa/ testb@111.160.40.132:/home/testb