互信

SSH互信



前言

单向互信和双向互信大致流程:

本机到其他节点免密码:本机生成私钥和公钥 -> 将公钥复制并改名为authorized_keys -> 将authorized_keys拷贝到其他节点

所有节点间互相免密码:本机生成私钥和公钥 -> 将公钥复制并改名为authorized_keys -> 将~/.ssh目录拷贝到其他节点并覆盖

互信和ssh详细原理可参考此文章 https://www.jellythink.com/archives/555

主机互信和用户互信区别:

  1. 主机互信是动/etc/ssh目录,用户互信是动~/.ssh文件
  2. 主机互信后,后面创建的新用户都可以直接免密登录;用户互信则需要每个用户单独设置.ssh。
  3. 第二点看得出来主机互信在集群管理上方便很多,不过主机互信可能会遇到ssh版本bug问题,安全隐患比用户互信大。

主机互信和用户互信对比小结:

  1. 集群管理中还是建议用户互信。
  2. 集群管理中新建用户的互信有脚本可以实现,其实也不比主机互信麻烦多少。

一、基于用户的互信

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生成秘钥需要借助xshellsecureCrt等工具。

xshell为例:

1)

2)

3)

4)

5)

6)在Linux中创建.ssh目录并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh

7)将公钥追加到~/.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日

原文地址:https://www.cnblogs.com/cyrus0w/p/13224334.html