SSH互信
前言
单向互信和双向互信大致流程:
本机到其他节点免密码:本机生成私钥和公钥 -> 将公钥复制并改名为authorized_keys -> 将authorized_keys拷贝到其他节点
所有节点间互相免密码:本机生成私钥和公钥 -> 将公钥复制并改名为authorized_keys -> 将~/.ssh目录拷贝到其他节点并覆盖
互信和ssh详细原理可参考此文章 https://www.jellythink.com/archives/555
主机互信和用户互信区别:
- 主机互信是动/etc/ssh目录,用户互信是动~/.ssh文件
- 主机互信后,后面创建的新用户都可以直接免密登录;用户互信则需要每个用户单独设置.ssh。
- 第二点看得出来主机互信在集群管理上方便很多,不过主机互信可能会遇到ssh版本bug问题,安全隐患比用户互信大。
主机互信和用户互信对比小结:
- 集群管理中还是建议用户互信。
- 集群管理中新建用户的互信有脚本可以实现,其实也不比主机互信麻烦多少。
一、基于用户的互信
1.1、添加linux的用户互信
说明:想用哪个用户免密,就用哪个用户登录到master主节点执行,比如本文是让节点间root用户之间免密。
# 1.主机生成key
ssh-keygen -t rsa -C wufeng10130@163.com
# 2.重命名key文件
cd ~/.ssh
cp id_rsa.pub authorized_keys
# 3.(可选)如果为非高性能的环境,建议不进行此配置,此配置会忽略ssh主机key检查(就是忽略yes/on询问)
echo 'StrictHostKeyChecking no' > ~/.ssh/config
# 4.(可选)对ssh做一些优化,包括防止特定网络环境下连接断开、压缩数据、多通道、加快ssh连接等选项
echo 'TCPKeepAlive=yes' >> ~/.ssh/config
echo 'ServerAliveInterval=15' >> ~/.ssh/config
echo 'ServerAliveCountMax=6' >> ~/.ssh/config
echo 'Compression=yes' >> ~/.ssh/config
echo 'ControlMaster auto' >> ~/.ssh/config
echo 'ControlPath /tmp/%r@%h:%p' >> ~/.ssh/config
echo 'ControlPersist yes' >> ~/.ssh/config
# 5.赋予权限
chmod 644 ~/.ssh/authorized_keys ~/.ssh/config
# 6.将授权文件拷贝到其余节点
scp -rp ~/.ssh mgt02:/root
# 7.输入密码,完成文件远程拷贝
1.2、添加windows的用户互信
说明:此方式是把windows中生成的秘钥拷贝到Linux中,windows生成秘钥需要借助xshell
或secureCrt
等工具。
以xshell
为例:
1)
2)
3)
4)
5)
6)在Linux中创建.ssh目录并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh7)将公钥追加到
~/.ssh
目录下的authorized_keys
文件中windows
2 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyD6Gbu6M/y2N8NvqOLMRrVbssDnBvZhvjbf7vOvQwppZEjYlW+bOL6KxCTk/bT2/sP0/KL/119X6MyPL5x1sAvU0oCuChmImU6KHtXRsHpYHk0yYu8S3ucKayHaTZk6aLPgrax45IBFUKbntDI5g/hel5v1byubGhe24olyIL9rpkPJ4q9D1V/wi9KhFiDorB82t/PCdmQIY6wLwYIUL2LGvyENbwGrN31N9p3hhK/1+47ptcJ9w2Wlj7o26/n/JNJG0UdkYmcLAYSOTkqHNF9epcdNAWwfRrga2s9idfe+MvlkZpqiCGSc0ZeJqaEH5uRLmjJUPr0/19YlYqNj6/Q==
8)xshell登录设置
1.3、删除用户互信
1.删除~/.ssh/known_hosts中对应的主机信息
2.删除~/.ssh/authorized_keys中对应的主机信息
二、基于主机的互信
2.1 添加主机互信
说明:到master主节点执行以下脚本
#!/bin/bash
#add for ssh
#
echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config
echo "EnableSSHKeysign yes" >> /etc/ssh/ssh_config
echo "HostbasedAuthentication yes" >> /etc/ssh/sshd_config
#(可选)高性能计算集群需要,用来取消yes/on交互式应答,好像只有centos7需要加,centos6不加
echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
cat /etc/hosts|grep -v -E "^#|localhost"|awk '{print $2","$1}'> /etc/ssh/hostlist
cat /etc/hosts|grep -v -E "^#|localhost"|awk '{print $2}' > /etc/ssh/shosts.equiv
ssh-keyscan -t rsa -f hostlist > /etc/ssh/ssh_known_hosts
/etc/init.d/sshd restart
/etc/ssh/hostlist内容如图:
/etc/ssh/shosts.equiv内容如图:
最后将ssh_config、sshd_config、shosts.equiv、hostlist、公钥、私钥、ssh_known_hosts同步至所有节点的/etc/ssh/目录中,并重启客户节点的sshd 服务;(不能将整个/etc/ssh目录拷过去!!)
cd /etc/ssh
scp -r ssh_config sshd_config shosts.equiv hostlist ssh_known_hosts ssh*.pub ssh*key caegns07:/etc/ssh/
结语
感谢您花费时间阅读这篇教程,如果喜欢可以帮忙转发或收藏!祝您在这里记录、阅读、分享愉快!
作者 @cyrus0w
2021 年 1月 30日