一、演示环境:
IP |
Hostname |
OS |
192.168.0.200 |
server1 |
CentOS 7.9 |
192.168.0.201 |
server2 |
CentOS 7.9 |
192.168.0.202 |
server3 |
CentOS 7.9 |
说明:
1、上述3台主机都关闭了firewalld和SELinux;
2、每一次演示后,所有主机都会恢复默认配置。
二、配置SSH白名单用户登录:
1、server1中创建测试用户user1、user2和user3:
# useradd user1
# echo "12345678" | passwd --stdin user1
# useradd user2
# echo "12345678" | passwd --stdin user2
# useradd user3
# echo "12345678" | passwd --stdin user3
2、server1中修改sshd_config配置文件:
# echo "AllowUsers user1 user2" >> /etc/ssh/sshd_config
# tail -1 /etc/ssh/sshd_config
3、server1重启sshd:
# systemctl restart sshd
4、测试:
(1)用户user1和user2能通过其它主机远程登录server1:
# ssh user1@192.168.0.200
# ssh user2@192.168.0.200
(2)用户root和user3无法通过其它主机远程登录server1:
# ssh root@192.168.0.200
# ssh user3@192.168.0.200
三、配置SSH白名单IP登录:
1、相关配置文件:
(1)/etc/hosts.allow:允许指定IP或IP段登录主机
(2)/etc/hosts.deny:禁止指定IP或IP段登录主机
说明:
(1)可通过同时修改上述两个配置文件,实现白名单效果;
(2)当上述两个配置文件中同时存在相同IP时,allow优先级高,allow生效。
2、server1阻止所有IP远程登录:
# echo "sshd:ALL" >> /etc/hosts.deny
# tail -1 /etc/hosts.deny
3、server1仅允许server2远程登录:
# echo "sshd:192.168.0.201" >> /etc/hosts.allow
# tail -1 /etc/hosts.allow
说明:如果允许多个IP远程登录,IP之间需要用逗号分隔
例如:
# echo "sshd:192.168.0.201, 192.168.0.202" >> /etc/hosts.allow
4、server1重启sshd:
# systemctl restart sshd
5、测试:
(1)用户root能通过server2远程登录server1:
# ssh root@192.168.0.200
(2)用户root无法通过server3远程登录server1:
# ssh root@192.168.0.200
四、server1配置基于SSH公钥认证实现免密登录server2:
1、server1默认没有/root/.ssh目录:
# ls /root/.ssh
2、server1生成SSH私钥和公钥:
# ssh-keygen -t rsa
说明:
(1)私钥名称和保存路径均为默认,回车即可
(2)此处私钥不设置密码,两次回车即可
# ls /root/.ssh
说明:id_rsa为私钥文件,id_rsa.pub为公钥文件
3、server1将公钥复制至server2:
# ssh-copy-id root@192.168.0.201
说明:如果ssh-copy-id命令不可用,也可手动将server1公钥文件id_rsa.pub中的内容复制至server2的/root/.ssh/authorized_keys文件中。
4、查看server1和server2中/root/.ssh目录文件情况:
(1)server1:
(2)server2:
说明:
/root/.ssh/known_hosts和/root/.ssh/authorized_keys是SSH(Secure Shell)协议中用于身份验证和密钥交换的两个重要文件。
(1)/root/.ssh/known_hosts:用于存储已知的远程主机的公钥指纹,用于验证远程主机身份。当尝试首次连接到一个新主机时,SSH会将该主机的公钥发送至本地主机,并将其添加至known_hosts文件中。当再次连接至该主机时,SSH会比对该主机的公钥与known_hosts文件中保存的公钥是否一致,以确保连接的安全性。
(2)/root/.ssh/authorized_keys:用于存储允许通过SSH访问的用户公钥。当尝试连接到一个新主机时,SSH会将该主机上的每个用户的公钥发送至本地主机,并检查是否在/root/.ssh/authorized_keys文件中列出了该用户的公钥,如果列出了该用户的公钥,则允许连接到该用户。
5、server1免密登录server2:
# ssh root@192.168.0.201