今天搭建一个某云服务器集群,但问题是并不知道root的开机密码,只有一个登录的秘钥,所以在进行免密设置的时候遇到了点麻烦,也因为这个契机,对所谓的公钥私钥有了自己的理解,可能理解会有偏差,但好歹也算能指导成功设置。
一、在以前看的教程中,ssh免密传输文件的步骤是这样的:
1、在每台机器上运行ssh-keygen -t rsa命令
2、在每台机器上找到生成的文件目录,执行cat id_rsa.pub >> authorized_keys
3、在主节点上运行
ssh-copy-id –i节点1
ssh-copy-id –i节点2
ssh-copy-id –i节点3
ssh-copy-id –i节点4
…
4、在主节点上运行
scp authorized_keys root@节点1:/root/.ssh/
scp authorized_keys root@节点1:/root/.ssh/
scp authorized_keys root@节点1:/root/.ssh/
scp authorized_keys root@节点1:/root/.ssh/
…
二、按以上教程不出意外就能互传文件了,但是我没有各节点root的开机密码,而在最后两步的时候必须输入密码才能临时传输文件。这就导致设置进行到第三步就进行不下去的尴尬局面。在查找资料之后,弄明白了上面四步的含义。
1、在每台机器上运行ssh-keygen -t rsa命令
这一步是在生成一把锁id_rsa和一把钥匙id_rsa.pub,我们在每台机器上运行一次,相当于生成了n把钥匙和n把锁。
2、在每台机器上找到生成的文件目录,执行cat id_rsa.pub >> authorized_keys
authorized_keys相当于一个钥匙圈,这一步意思是把钥匙id_rsa.pub串到了钥匙圈。
3、在主节点上运行
ssh-copy-id –i节点1
ssh-copy-id –i节点2
ssh-copy-id –i节点3
ssh-copy-id –i节点4
…
这一步,相当于把其他节点上所有的钥匙配了一把然后串到了主节点的钥匙authorized_keys上。这样一来,就可以拿着钥匙串去别的节点开锁去了。
4、在主节点上运行
scp authorized_keys root@节点1:/root/.ssh/
scp authorized_keys root@节点1:/root/.ssh/
scp authorized_keys root@节点1:/root/.ssh/
scp authorized_keys root@节点1:/root/.ssh/
…
这一步是把主节点的能开所有锁的钥匙串复制并送给每个节点,这样,集群里的所有机器都能互相连通了。
三、弄清了其中的原理,接下来就简单了,无非是怎么复制钥匙串成串的问题。先用Xftp来使服务器的文件可视化,大大加快了文件修改复制下载上传的效率。
1、首先依照原教程的第一步,这时候得到了一堆钥匙、钥匙圈和锁。
2、然后把各个节点的钥匙id_rsa.pub下载到本地,为了方便区别,重命名为id_rsa1.pub、id_rsa2.pub、id_rsa3.pub、id_rsa4.pub…。
3、把下载到本地的钥匙们上传到主节点(其他节点也可以,意思就是把所有钥匙集中在一起)。
4、然后运行命令
cat id_rsa1.pub >> authorized_keys串上第一个钥匙
cat id_rsa2.pub >> authorized_keys串上第二个钥匙
cat id_rsa3.pub >> authorized_keys串上第三个钥匙
cat id_rsa4.pub >> authorized_keys串上第四个钥匙
…
至此,主节点得到一个可以开集群里所有锁的钥匙串。
5、下载文件authorized_keys,并再把这个文件上传到每个节点上(注意文件路径),所有节点都拥有了一个可以开集群所有锁的钥匙串。
这时候就可以免密传文件及登录了,全程没有用到各服务器的开机密码。
四、关于报错ssh_exchange_identification: read: Connection reset by peer的补充
在一开始没有免密且不知道密码的时候,用scp命令传输文件,多次尝试且失败。在成功配置免密后仍然报错ssh_exchange_identification: read: Connection reset by peer,这个是因为多次尝试登录但密码错误导致发送文件的服务器ip被接收文件的服务器拉进了黑名单,去路径/etc/下可以找到一个文件sshd.deny.hostguard,用记事本打开可以找到那个被拉黑的ip,删掉并保存后即可解决问题。