本文基于Linux上CentOS 7版本配合Xshell 7进行演示
一.SSH简介
1.介绍
2.工作流程
二.具体配置免密步骤
1.配置前准备工作
2.正式配置过程
三.在服务器端配置SSH远程黑白名单
1.配置文件/etc/ssh/sshd_config部分参数解析
2.配置远程登录黑白名单
SSH用于计算机之间的加密登录,是一类网络协议,使用SSH协议远程登录另一台计算机,这种登录是相对安全的,即使被中途截获,密码不会泄露。
(1)建立连接:SSH服务器在指定的端口监听客户端的连接请求,在客户端向服务器发起连接请求后,建立一个TCP连接。
(2)协商版本:某些版本可以支持更多的认证方法和密钥交换方法,SSH服务器和客户端通过协商确定最终使用的SSH版本号。
(3)算法协商:双方根据各自支持的算法,协商出最终用于产生会话密钥的密钥交换算法,用于数据信息加密的加密算法、用于进行数字签名和认证的公钥算法。
(4)交换密钥:服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和绘画ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。
(5)用户认证:密码(password)认证、密钥(publickey)认证、password-publickey认证(同时满足)、all认证(选择其一)
(6)会话请求和交互:认证通过后,SSH客户端向服务器端发送会话请求,请求服务器提供服务,建立好会话后,SSH服务器端和客户端在该会话上进行数据信息交互。
(1)准备两台Linux虚拟机,一台作为服务端,一台作为用户端
注意:两台虚拟机均需要关闭selinux、防火墙(可参考专栏相关文章)
(2)使用Xshell远程连接工工具生成公钥文件
点击“新建用户密钥生成向导”
在此已经生成公钥文件,可以复制下框内文本,也可以将文本保存为桌面文件,方便下一步使用,点击完成即可
(3)开始在服务器端存放客户端公钥,查看是否有/root/.ssh/authorized_keys文件,如果没有可以手动创建。
[root@sulibao ~]# cd /root/.ssh/
[root@sulibao .ssh]# ll
total 8
-rw-r--r-- 1 root root 381 Jan 4 10:30 authorized_keys
(1)在服务器端编辑/root/.ssh/authorized_keys,将上面保存的客户端公钥文本保存在文件中
(2)在客户端,使用“ssh-keygen -t rsa -b 2048”命令生成密钥文件
[sulibao@sulibao ~]$ ssh-keygen -t rsa -b 2048
//-t指定加密算法,-b指定位数
(3)在客户端使用 “ssh-copy-id -i root@服务端IP”将密钥文件拷贝给服务端,并输入一次服务器端密码
[sulibao@sulibao ~]$ ssh-copy-id -i [email protected]
(4)测试是否能够免密登录,“ssh 用户名@目标IP”
[sulibao@sulibao ~]$ ssh [email protected]
Last login: Fri Jan 6 11:42:27 2023 from 192.168.xx.xx
[root@sulibao ~]#
注意:此时如果想从服务端免密登录客户端,就在服务端重复上述在客户端的操作操作即可
主要是对“/etc/ssh/sshd_config”配置文件进行修改
Port 22 | 监听端口,默认监听22端口 |
AddressFamily any | IPV4和IPV6协议家族用哪个,any表示二者均有 |
ListenAddress 0.0.0.0 | 指明监控的地址,0.0.0.0表示本机的所有地址 |
ListenAddress :: | 指明监听的IPV6的所有地址格式 |
Protocol 2 | 使用SSH第二版本 |
HostKey for protocol version 1 | 一版的SSH支持以下一种秘钥形式 |
HostKeys for protocol version 2 | 使用第二版本发送秘钥,支持以下四种秘钥认证的存放位置 HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证 |
ServerKeyBits 1024 | 主机秘钥长度 |
LoginGraceTime 2m | 登录的宽限时间,默认2分钟没有输入密码,则自动断开连接 |
PermitRootLogin yes | 是否允许管理员远程登录,'yes'表示允许,‘no’表示禁止 |
StrictModes yes | 是否让sshd去检查用户主目录或相关文件的权限数据 |
MaxAuthTries 6 | 最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码 |
MaxSessions 10 | 允许的最大会话数 |
AuthorizedKeysFile .ssh/authorized_keys | 选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面 |
PasswordAuthentication yes | 是否允许支持基于口令的认证 |
ChallengeResponseAuthentication no | 是否允许使用键盘输入身份验证,也就是xshell的第三个登录方式 |
UseDNS yes | 是否反解DNS,如果想让客户端连接服务器端快一些,可以改为no |
ubsystem sftp /usr/libexec/openssh/sftp-server | 支持 SFTP ,如果注释掉,则不支持sftp连接 |
AllowUsers user1 user2 | 登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录 |
(1)禁止root用户远程登录,将PermitRootLogin yes改为PermitRootLogin no
需要重启sshd服务该配置文件才生效
[root@sulibao ~]# systemctl restart sshd
此时再使用Xshell以root用户身份则无法登录
(2)禁止/允许某些用户登录
新建两个用户user1和user2来测试
[root@sulibao ~]# useradd user1
[root@sulibao ~]# useradd user2
编辑配置文件“/etc/ssh/sshd_config ”,在文末添加内容后重启
[root@sulibao ~]# vim /etc/ssh/sshd_config
[root@sulibao ~]# systemctl restart sshd
进行测试,user1可以登录而user2不行
注意:AllowUsers 选项指定哪些用户可以登录,那么所有非指定用户都不能登录,像上面的情况只指定了user1可以登录,此时连root用户都不能登录,需要谨慎修改!