一、sshd服务介绍
Openssh功能 1.sshd服务的功能: 可以实现通过网络在远程主机开启安全shell操作 Secure SHell ssh 客户端 Secure SHell daemon(守护进程,管理ssh的进程,类似systemctld系统守护进程) sshd 服务端 2.安装包 openssh-server 3.主配置文件 /etc/ssh/sshd_conf 
4.默认端口 22(可以理解,ip是家中大门,端口是房间门) (服务在ip上开启的对外开放的接口,连接这个接口就是使用这个程序的功能) 5.客户端命令 ssh 6.实验环境:两台虚拟机,a是服务器,b是客户端 能通信,关闭图形,init 3 
二、使用方法
2.1基本用法
ssh 是客户端使用的,连接的是服务器 可以在ssh后面直接接命令
ssh -l 远程主机用户(服务器) ip|hostname
ssh -l root 172.25.254.100
yes,第一次连接会有  fingerprint在你当前目录的.ssh/底下 比如:cd /root/.ssh/ 这个文件和服务端100上面的文件是匹配的 两个key一样   第二次连接没有认证指纹 
2.2模拟匹配(认证)不成功,远程登录失败
删掉原先的key重启服务,然后重新生成key  现在的key和之前不一样了  认证改变了,认证不匹配,不通过  解决方法(提示了红框标出,这行文件有问题): 删掉该第一行 总结: 当连接因为认证问题被拒绝时解决方案 在提醒的文件中删除对应的行即可
三、常用参数
3.1常用参数
-l 指定登录用户
-i 指定私钥
-X 开启图形
-f 后台运行
-o 指定连接参数
-t指定连接条板
3.2常用参数用法
-X参数
-X开启图形 真机连接a主机
ssh -l root 172.25.254.100
gedit 开启图形,开启不了
因为,ssh连接默认是文本连接,不能开启图形 ``
ssh -X -l root 172.25.254.100
gedit
有了开启图形软件的权利 
-f参数
可以在ssh后面直接接命令  等待打开时间时候会占用你的终端 打入后台后,你可以在终端运行新的指令 
-o参数
指定连接参数,这个参数可以在man中查看 最常用的参数StrictHostKeyChecking=no
ssh -o "StrictHostKeyChecking=no" -l root 172.25.254.100
自动会输入成yes

-t参数
连接A服务器的时候,我的权利不行,另一台服务器250我能连接并且另一台服务器能连接A服务器,可以先连接250在由250跳到A 先连接到250服务器再由250服务器跳到100  这个时候A服务器看见的是250服务器连接它的 
四、key认证
4.1概念
B是客户端,A是服务器
ssh -l root 172.25.254.100这样连接必须知道root用户在远程服务器的密码

这种认证方式叫用户认证 认证方法是对称加密,加密和解密用的是同一串字符,如:指纹 非对称加密,加密和解密用的不同,钥匙与锁
对称加密,容易被破解,可以被暴力破解(用一个计算速度很快的电脑一个一个试),所以密码要有强度校验,并且容易遗忘 非对称加密,加密用公钥,解密用私钥,不会被盗用,攻击者无法通过无秘钥方式登录服务器
4.2生成公钥和秘钥
公钥和私钥没有必要必须在服务器端生成,客户端和服务器端都能生成公钥和私钥(比如买锁那都能买) 比如在客户端生成公钥和私钥
ssh-keygen 生成公钥和私钥的命令
问你key(秘钥加密字符串的文件)保存在哪里,如果更改保存路径还需要更改ssh主配置文件,更改麻烦,所以用默认就行  设定一个密码,就是需要秘钥还需要输入密码,(秘钥的密码)麻烦,直接回车 公钥和私钥生成了  cat /root/.ssh/id_rsa 这个是私钥(解锁) 公钥(上锁) cat /root/.ssh/id_rsa.pub  服务器发来的frigerprint指纹认证密码,证明这台主机B连接服务器A的时候是原先的主机B
该生成公钥和秘钥都是交互式,不利于自动操作 如果用脚本生成公钥和秘钥,脚本不能自动运行 自动操作不是交互式
ssh-keygen --help
 非交互式生成公钥和秘钥-f指定保存加密的文件-P表示指定的密码
ssh-keygen -f /root/.ssh/id_rsa -P ""

4.3公钥和私钥的使用(上锁)
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.100
要被锁的服务器的密码,征求被锁服务器的同意,要不然就是非法的 类似你用锁乱锁别人家门肯定不行  这个时候服务器A会多个文件,这个文件其实就是公钥  和B的公钥是一样的
客户端B有私钥,只有一个秘钥  直接连接,无需密码(直接默认使用唯一的私钥去开公钥)
如果有很多私钥,-i指定具体私钥去开公钥就行了 
4.4总结
ssh-keygen -f /root/.ssh/id_rsa -P "" 生成Key
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.100 用key给服务器加密
加密完服务器有两种认证方式,有私钥的无需输入密码连接,无私钥输入密码连接
五、sshd服务的安全优化
5.1安全问题描述
5.1.1原始密码与key认证
7号主机可以连接我们的服务器A,有输密码的权利,但是这个功能本身不安全,本应该不能开启,所以要关闭这个功能 所以需要在服务器A上关闭不安全的功能 
5.1.2修改端口
不修改端口,大家都知道端口是22默认端口
5.1.3限制谁可连接谁不可连接
设定只能连接谁或者不能连接谁
5.2 关闭原始的密码认证
编辑服务器A的主配置文件  改成no服务器A的密码认证功能关闭了,只有公钥和私钥(key)认证可以连接 关闭密码认证前,先要把key认证服务启动好,因为Key认证一开始需要密码认证来承认允许Key认证(允许上锁)
 重启服务systemctl restart sshd 现在没有输入密码的权利了,现在连暴力破解都不行了,因为没有输入密码的途径了 
5.3修改端口
由于服务器开启的selinux会限制你的端口的更改,需要更改selinux为警告模式 关闭火墙  systemctl disable --now firewalld 因为火墙只允许22端口,如果开启火墙2021就测试不成功了
修改主配置文件
 重启服务systemctl restart sshd 端口变成2021了
 
5.4设定可连接的对象(用户的黑白名单)
白名单在名单才可被ssh连接 在主配置文件中,找个空位写AllowUsers westos 只能连接westos用户 重启服务systemctl restart sshd 多个用户
AllowUsers westos root
重启服务systemctl restart sshd 连接成功  黑名单在名单不能被ssh连接
DenyUsers westos
westos不能通过ssh连接
重启服务systemctl restart sshd 
5.5总结

|