背景和需求
企业对于办公网-线上环境的远程登录操作一般都会进行限制。比如常见的通过堡垒机或者跳板机 实现 用户单次登录到服务器。
但是 总有些情况下用户需求是:本人有权限的机器之间直接免密登录;比如 部署一套集群类型的服务,或者多节点的一个服务。那么肯定希望机器之间能够免密去进行文件传输、配置同步等等
当然,如果自己不怕麻烦,耐心去寻找,总有替代方案,也能帮助公司减少安全隐患。此类需求建议再配置一套ftp等信息同步协议,也不需要免密去登陆了。
适用场景:企业已经有一个自己的服务端口用于通过堡垒机登录机器了,当前个人需要再开启22端口去用于ssh服务实现正常的免密。操作系统为:CentOS
安装或重启sshd服务
一般系统中所安装的ssh服务都是由 openssh 包提供的,我们先通过命令查看openssh 包提供的 systemd 服务相关文件
rpm -ql openssh-server
返回结果:/etc 目录存放了系统的各个配置文件、启动脚本等(主要为配置文件,比如/etc/ssh/sshd_config);/usr 目录存放了系统的应用程序(如:/usr/lib/systemd/system/sshd.service)
认识sshd服务的相关文件和目录(系统默认的)
sshd.service / sshd.socket sshd服务的系统启动文件(centos一般为.service)
sshd-keygen.service 用于生成系统公私钥的服务
sshd_config 通过sshd.service服务启动所加载的配置文件
sshd.socket 通过sshd.socket 服务启动所加载的配置文件
在root用户权限下开始执行如下步骤启动或安装sshd:
查看sshd.service文件内容(有兴趣自己了解):
cat /usr/lib/systemd/system/sshd.service
检查sshd服务启动的状态:
systemctl status sshd
查看结果:发现sshd服务未正常启动
报错(Cannot add dependency job for unit sshd.service, ignoring: Unit is masked.)此处原因是sshd服务被锁住了。
通过命令 systemctl unmask sshd 解锁,然后直接执行命令 ** systemctl restart sshd**重启sshd服务,检查状态:active 表示正常
遇难三板斧:一般问题:sshd被锁、端口被占用、配置文件加载出错等。
如果遇到sshd服务被卸载的,直接重装即可(yum install openssh-server -y)
systemctl unmask sshd #解锁sshd服务
netstat -lntp | grep sshd | grep 22| awk '{print $7}' | awk -F '/' '{print $1}' #查找sshd服务的22端口进程
netstat -lntp | grep sshd | grep 22| awk '{print $7}' | awk -F '/' '{print $1}' | xargs kill 查找22端口的sshd服务,并直接kill掉
systemctl start sshd
systemctl status sshd
配置机器之间 公私钥 免密登录
首先 你有机器A和机器B,IP分别为:
10.0.0.1 #机器A
10.0.0.2 #机器B
1、通过机器A直接免密登录到机器B上
a、先分发公私钥
先进去机器A,在root权限下执行如下命令:
ssh-keygen
直接适用默认路径即可,表示给机器A的root账户生成了公私钥。下一步是把机器A的公钥放在机器B的 /root/.ssh/authorized_keys
在机器A上操作:
cd /root/.ssh/
cat id_rsa.pub #将cat的结果复制到自己的剪切板上!!!
在机器B上操作,远程机器B,通过 sudo su 获取root权限:
cd /root/.ssh/
echo $粘贴自己剪切板的内容 >> authorized_keys
b、修改机器B上面的sshd_config
修改的内容如下:(ps:此处仅针对 公私钥配置和一些我遇到的问题进行配置修改分析,若不适用,请参考sshd_config文件的详解,附录链接)
执行命令 vim /etc/ssh/sshd_config
Port 22 #选择sshd服务的启动端口
PasswordAuthentication yes #是否允许账号密码登录(公私钥建议选择no)
PubkeyAuthentication yes #是否允许公私钥认证登录
AllowUsers root@机器A_IP # 允许机器a通过root用户登录
PermitEmptyPasswords yes # 是否允许空密码(免密类型配置yes)
PermitRootLogin yes # 是否允许root登录(登录到的是root账户,选yes)
配置完成后,保存,然后重启sshd服务systemctl restart sshd
验证
在机器A上测试登录:ssh root@机器B -p22
确认登录完成。
同理,如想要配置机器B免密登录机器A,相同的操作,换机器的身份即可!
写在最后
安全风险:企业虽限制了用户远程直连线上服务器的方式,实现了更安全的通过堡垒机/跳板机连接到服务器。但是其仍然解决不了的事 服务器之间东西向的流量,故如果一台主机被攻陷,那么若用户配置了类似 弱密码、无密码、公钥被窃取等类型的 机器间免密登录,则风险无法估量和溯源。担责为安全和用户
防护措施:如若工作需求,需要配置此类免密登录方式,建议用户熟读sshd配置文件的一些字段和限制,比如AllowUsers 等,可以较好的在免密同时,提高安全性!还有一些其他的sshd安全文件 比如:/etc/hosts.allow 和 /etc/hosts.deny等
sshd_config 配置文件参考链接: sshd配置文件参考
https://www.cnblogs.com/klb561/p/9190989.html