ssh协议
---基于 tcp 的 22 号端口
确认是否有ssh包:
[root@server ~] rpm -qa | grep ssh
openssh-clients-8.7p1-24.el9_1.x86_64
openssh-server-8.7p1-24.el9_1.x86_64
1、 ssh的验证过程
第一阶段:版本协商以及tcp三次握手
第二阶段:秘钥和算法协商阶段
服务端发送公钥文件,客户端主机无条件确认公钥(服务端确认客户端身份--内网)
内部通过DH交换算法协商对称算法
第三阶段:认证阶段(客户端验证服务端)
通过用户名和密码验证
通过用户名和公钥验证(更安全)
第四阶段:会话链接传输阶段
2、对ssh服务端的配置
【注】ssh服务安装包openssh-server
[root@server1 ~]# vim /etc/ssh/sshd_config --- 配置ssh文件
17.Port 22 #监听端口,默认监听22端口 【默认可修改】
18.AddressFamily any #IPV4和IPV6协议家族用哪个,any表示二者均有
19.ListenAddress 0.0.0.0 #指明监控的地址,0.0.0.0表示本机的所有地址 【默认可修改】
20.ListenAddress :: #指明监听的IPV6的所有地址格式
48.LoginGraceTime 2m #登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
49.PermitRootLogin yes #是否允许管理员远程登录,'yes'表示允许
51.MaxAuthTries 6 #最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
52.MaxSessions 10 #允许的最大会话数
59.AuthorizedKeysFile .ssh/authorized_keys #选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
79.PasswordAuthentication no #是否允许支持基于口令的认证
129.UseDNS no #是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
146.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
154.AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录
3、实验配置
实验1:修改ssh服务的端口号
[root@server1 ~]# vim /etc/ssh/sshd_config
Port 2222
[root@server1 ~] systemctl disable firewalld
[root@server1 ~] setenforce 0 --- 用于临时关闭 SELinux
[root@server1 ~] getenforce --- 查看 SELinux当前执行模式
Permissive --- 当前SELinux是宽松模式,可以进行一些违规操作
[root@server1 ~] systemctl restart sshd
实验2:拒绝root用户远程登陆
#请保持服务器上至少有一个可以远程登陆的普通远程账号
[root@server1 ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
#重启服务后生效,使用时使用普通用户进行登陆,需要使用root用户时再切换
实验3:允许特定用户ssh登陆,其他用户都无法登陆
[root@server1 ~]# vim /etc/ssh/sshd_config
AllowUsers USERNAME
#USERNAME为你允许登陆的账号【需要在系统中useradd该账号】
#如果是多个用户,中间用空格隔开
#重启ssh服务后生效
实验四:公钥验证,免密登录
服务器地址: 192.168.146.129
一、Linux -- Linux:
客户端地址:192.168.146.131
1、生成非对称密钥:[root@localhost ~]# ssh-keygen -t rsa --- 用rsa算法生成密钥
密钥已成功生成
2、将当前主机的.ssh/id_rsa.pub文件发送到129主机的/.ssh/authorized_keys:
ssh-copy-id 192.168.146.129
3、确定发起ssh连接不需要任何验证: ssh 192.168.146.129
二、Windows -- Linux:
注释:使用Xshell和Xftp实现
1、打开Xshell如图选择新建用户密钥生成向导
2、一直下一步
3、密钥名称任意,因为做免密,所以不设置密码
4、选择保存本地(能找到即可)
生成如图文件:
5、打开Xftp
将需要设置免密的服务器和Windows主机连接
如图将之前生成的server.pub发送到Linux的/root/.ssh目录下
再如下改名:[root@server ~]# mv .ssh/server.pub .ssh/authorized_keys
最后就可以在登录root时选择公钥验证了