多主机间实现SSH免密登录

本文最后更新于:July 9, 2019 pm

K8S部署的前期准备工作,多台CentOS主机之间使用SSH免密登录。

1、实现原理

这里我们需要实现的一共有两个效果,一个是这五台CentOS主机之间任意两台之间都能使用ssh免密登录,另一个就是能够直接使用 ssh hostname 的方式登录而不需要使用 ssh account@ip_addr的方式登录。

1.1 rsa密钥对

一般来说我们的SSH使用的是RSA类型的密钥对,使用ssh-keygen默认生成的也是RSA类型的密钥对。一般来说会产生两个文件,分别是id_rsaid_rsa.pub,其中前者是私钥,后者是公钥。私钥不能泄露,而公钥是放置在目标主机的authorized_keys文件中,从而实现免密登录的效果。

要实现五台CentOS主机之间任意两台之间都能使用ssh免密登录,只需要将这五台主机的id_rsa.pub都存放到一个authorized_keys文件中,然后再将这个文件复制到每一台主机上即可。

1.2 hosts文件

CentOS中的/etc/hosts文件中存放着主机名和对应的ip地址等信息,想要实现直接使用 ssh hostname 的方式登录的效果,只要在hosts文件中添加ip地址和对应hostname(主机名)即可。

2、操作步骤

2.1 安装启用ssh

1
2
3
4
5
6
# master和每台node节点上安装ssh
sudo yum install -y openssl openssh-server

# master和每台node节点上启动ssh并设置开机自启
systemctl start sshd.service
systemctl enable sshd.service

2.2 生成密钥对

1
2
# master和每台node节点上都生成ssh密钥,接下来一路回车
ssh-keygen

需要注意的是,这里提示输入的passphrase相当于ssh密钥对的密码,不输入的话直接回车跳过即可,输入了之后,每次使用ssh免密登录的时候会再要求输入passphrase以保证安全。

1
2
3
4
5
6
7
8
9
# 将每台node节点的id_rsa.pub复制到master上面,注意要重新命名避免覆盖
scp /home/tinychen/.ssh/id_rsa.pub tinychen@192.168.100.50:/home/tinychen/.ssh/node5*

# 在master上使用cat命令将master和所有node节点的id_rsa.pub追加到authorized_keys中
cat id_rsa.pub >> authorized_keys
cat node51 >> authorized_keys
cat node52 >> authorized_keys
cat node53 >> authorized_keys
cat node54 >> authorized_keys

2.3 配置sshd_config

1
2
# 编辑master的ssh配置文件,去掉红圈中三项前面的#使其生效
sudo vim /etc/ssh/sshd_config

2.4 编辑hosts

1
2
3
4
5
6
7
8
9
# 编辑master节点的/etc/hosts文件,追加ip地址和对应的主机名,使得能够直接使用ssh+主机名的方式登录

sudo vim /etc/hosts

192.168.100.50 master50
192.168.100.51 node51
192.168.100.52 node52
192.168.100.53 node53
192.168.100.54 node54

2.5 复制master的配置文件

1
2
3
4
5
6
# 将master节点的ssh配置文件复制到每一个节点上
# 这里必须使用root账户,否则权限不足
sudo scp /etc/ssh/sshd_config root@192.168.100.51:/etc/ssh/sshd_config
sudo scp /etc/ssh/sshd_config root@192.168.100.52:/etc/ssh/sshd_config
sudo scp /etc/ssh/sshd_config root@192.168.100.53:/etc/ssh/sshd_config
sudo scp /etc/ssh/sshd_config root@192.168.100.54:/etc/ssh/sshd_config
1
2
3
4
5
# 将master节点的authorized_keys文件复制到每一个节点上
scp /home/tinychen/.ssh/authorized_keys tinychen@192.168.100.51:/home/tinychen/.ssh/authorized_keys
scp /home/tinychen/.ssh/authorized_keys tinychen@192.168.100.52:/home/tinychen/.ssh/authorized_keys
scp /home/tinychen/.ssh/authorized_keys tinychen@192.168.100.53:/home/tinychen/.ssh/authorized_keys
scp /home/tinychen/.ssh/authorized_keys tinychen@192.168.100.54:/home/tinychen/.ssh/authorized_keys

2.6 修改ssh文件权限

1
2
3
# 对master和每一个node节点都进行ssh相关文件权限的修改
sudo chmod 700 /home/tinychen/.ssh/
sudo chmod 600 /home/tinychen/.ssh/*

3、验证效果

需要注意的是,第一次ssh登录的时候,因为known_hosts文件里面没有保存这台主机的对应信息,我们需要输入yes才能登录,之后便不再需要。

此外,如果使用ssh+主机名的方式登录,两台主机必须是使用的同一个用户,这里我使用的是tinychen用户,由于我已经在ssh的配置文件中修改了配置允许ssh使用root账户登录,因此这里我们使用管理员账户tinychen,如果有需要了再切换到root账户,保证安全性

4、补充

1
2
3
4
5
# 如果想要实现root账户之间的ssh免密登录,将.ssh文件夹整个复制过去即可
rm -rf /root/.ssh/
cp -r /home/tinychen/.ssh/ /root/
chmod 700 /root/.ssh/
chmod 600 /root/.ssh/*