有三台机器,ip和对应的hostname分别为
192.168.6.2 server2
192.168.6.3 server3
192.168.6.4 server4
我们的目的是实现三台机器之间互相免密SSH链接
大概分为三步
首先想上server2(客户端)免密连接上server3(服务端),server4(服务端)
先在server2上生成私钥和公钥
执行下面命令,然后一路狂按回车就完事
ssh-keygen
完了之后会在用户目录下的.ssh文件夹创建一个公钥和一个私钥
比如我是在root用户下,所以就是/root/.ssh
id_rsa (私钥)
id_rsa.pub (公钥)
还是在server2上进行操作
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
上面是上传到server3的root用户下,会在server3的/root/.ssh目录下生成一个authorized_keys文件
此时执行
vim authorized_keys
可以看到server2的公钥写在里面
这样就可以实现server2免密SSH链接server3
再把公钥发给server4就可以实现免密登录server4了
server3同样把公钥发给server2,server4就可免密登录这两台机器
server4同样把公钥发给server2,server3就可免密登录这两台机器
这样就实现了三台机器互相免密登录,此时互相scp传文件免密
ssh原理
开始有点分不清,这一通操作猛如虎后,分不清谁能免密连上谁。
后来通过实践研究自己总结了一下。把三台机器分别比喻成三个城池,
在一开始server2城池的人想去server3城池,server4城池,需要走城池大门,
卫兵要检查看有没有入城许可(输入server3,4密码的过程类似于此)。
后来server2的人去的次数多了嫌麻烦,干脆在城里放进去一个内应,以后每次去城里这个内应直接接进去,不用卫兵检查。这个内应就是放在server3,server4里面的公钥。
关于ssh-copy-id -i root/.ssh/id_rsa.pub user@ip
的解释
一开始很疑惑这个命令是什么意思,后来才明白其实这个命令类似于
scp root/.ssh/id_rsa.pub user@ip:/root/.ssh/authorized_keys
实现的功能也是把公钥发给某个机器的.ssh文件夹下,并重命名为authorized_keys
authorized_keys里面可以存放很多台机器的公钥,谁的公钥在就可以免密连这台机器
区别在于,如果使用上面scp命令的话,新来的会覆盖原来的,那么之前的机器就连不上
而 ssh-copy-id -i 命令可以把新的公钥追加在原来的公钥后面,不会影响之前机器的连接
如果不想让别的机器通过ssh输入密码连接,只想让免密连接机器连接怎么办
[root@server2 .ssh]# cd /etc/ssh/
[root@server2 ssh]# ls
moduli ssh_host_ecdsa_key ssh_host_ed25519_key.pub
ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key
sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub
[root@server2 ssh]# vim sshd_config
把sshd_config里面的 PasswordAuthentication yes改成PasswordAuthentication no
然后重启sshd服务,除了免密的机器别的机器就无法连接
[root@server2 ssh]# systemctl restart sshd