目标
本地机器一台,服务器六台,配置SSH登录
配置完成后:
- 本地可以登录六台主机,
- 主服务器(cdh01)可以免密登录其余五台主机,其余五台主机不能免密登录主服务器。
- 可以使用ssh cdh01, ssh cdh02作为主机名代替ip地址登录指定机器
具体要进行如下配置:
六台主机各自一对ssh密钥对(root用户下)。用于登录其它主机。
主服务器的/.ssh/authorized_keys(root用户)保存本地主机的公钥。其余五台主机的/.ssh/authorized_keys保存主服务器和本地服务器的ssh公钥。
这个文件中保存的公钥,允许持有对应私钥的服务器免密登录本主机。该文件的权限必须是600,如果权限放宽,就不具有免密登录效果。
每台主机的~/.ssh/known_hosts 都保存了其余五台主机的密钥指纹。(可选)
主机A登录主机B,第一次登录的时候,A会询问B的指纹是否正确,选择是则继续登录并把B的指纹保存在A自身的~/.ssh/known_hosts文件中。
为了省去第一次登录的询问过程,使用ssh工具提前添加进来。
在五台机器的~/.ssh/config中添加如下配置
Host cdh01 cdhm
HostName 172.16.23.11
User root
Host cdh02
HostName 172.16.23.12
User root
Host cdh03
HostName 172.16.23.13
User root
Host cdh04
HostName 172.16.23.14
User root
Host cdh05
HostName 172.16.23.15
User root
Host cdh06
HostName 172.16.23.16
User root
过程记录
# 1. 配置SSH
# 1.1 为六台主机生成密钥对
for i in cdh{01..06}; do
echo 为主机 $i 生成 ssh 密钥
ssh-keygen -b 2048 -f $i -N "" -q -C "(root@$i)" > /dev/null
done
# 1.2 收集本地ssh公钥和主节点服务器的公钥
cat ~/.ssh/id_rsa.pub > keys.pub
cat cdh01.pub >> keys.pub
# 1.3 把公钥上传到六台服务器上的 ~/.ssh/authorized_keys 文件
for i in 172.16.23.{11..16}; do
echo 上传公钥到 $i
cat keys.pub | ssh root@$i 'mkdir ~/.ssh -p; cd .ssh; cat - > authorized_keys; chmod 600 authorized_keys'
done
# 1.4 配置本地ssh
cp assests/cdh.conf ~/.ssh/
echo include cdh.conf >> ~/.ssh/config
# 1.5 搜集六台主机的指纹, 安装到六台机器上以及本机上
ssh-keyscan -t ecdsa,ed25519,rsa,dsa 172.16.23.{11..16} > known_hosts
# 1.5.1 先安装到本地机器
cat known_hosts >> ~/.ssh/known_hosts
# 现在本地可以登录六台机器,测试
for i in cdh{01..06}; do ssh $i "echo 登录 $i 成功"; done
# 1.5.2 再把 known_hosts 安装到六台服务器上
for i in cdh{01..06}; do
echo $i
cat known_hosts | ssh $i 'cat - >> ~/.ssh/known_hosts'
done
# 1.6 把私钥分发给各自的服务器
# 注:scp 命令会覆盖旧的私钥文件,如果服务器上已经有私钥,就不要复制
for i in cdh{01..06}; do
scp $i "$i:~/.ssh/id_rsa"
scp $i.pub "$i:~/.ssh/id_rsa.pub"
ssh $i "chmod 600 ~/.ssh/id_rsa"
done
# 1.7 完成,收工,清理现场
rm cdh* known_hosts keys.pub