1、Openssh的功能
sshd服务的用途是可以实现通过网络在远程主机中开启安全shell的操作,ssh 是客户端,sshd是服务端,主配置文件放在/etc/ssh/sshd_conf
,默认的端口号是22。
命令ssh [-l 远程主机用户] ip
可以远程连接,如ssh -l root 172.25.254.105
表示通过ssh命令在105主机中以root身份开启远程shell。
做这里的实验时,可以开启两个虚拟机a和b,使a和b连接,为了清楚,可以使用以下命令改变主机名,区分两个虚拟机,通过使用nm-connection-editor
命令打开配置图形界面,设置虚拟机a的ip为172.25.254.88,虚拟机b的ip为172.25.254.99。设置a为客户端,b为服务端。
如图,输入ssh -l root 172.25.254.99
后,出现身份认证,99主机会向当前主机88发送身份公钥,并保存此公钥到~/.ssh/know_hosts
,99主机持有私钥当客户主机再次连接时会对客户主机进行身份验证,公私钥是一对匹配的,输入yes
,再输入密码,成功登录。
ssh
除了使用-l
参数还有其他的参数;
(1)-l
指定登陆用户
(2)-i
指定私钥
(3)-X
开启图形
(4)-f
后台运行
(5)-o
指定连接参数,如可以使用ssh -l root@172.25.254.99 -o "StrictHostKeyChecking=no"
首次连接认证时不需要输入yes
(6)-t
指定连接跳板,有些时候服务端不允许普通用户登录,但是会设置一个中继的允许登录,那么我们就需要通过这个中继的跳到服务端登录。比如 ssh -l root 172.25.254.1 -t ssh -l root 172.25.254.105
表示通过1这个中继,远程登录105。
2、ssh报错
如图,假如删除了/etc/ssh/
下的密钥,改变了身份验证信息,那么再次登录时,会提示报错,无法认证,提示在/root/.ssh/known_host
里的第一行有问题,那么我们进去这里,把第一行旧的匹配信息删除。然后服务端重启sshd,这时客服端再次连接,会重新给认证信息,就可以正常登录了。
3、sshd 密钥认证
细心的同学已经发现每次远程登录时,都需要用的8位的密码,两边都是用的一样的,也称为对称加密,但是有一些缺点,如加密和解密是同一串字符,容易泄漏,可暴力破解,容易遗忘等,那我们就想改为非对称的加密方式了,它加密用公钥,解密用私钥,不会被盗用,攻击者无法通过无密钥方式登陆服务器,很舒服。改的过程主要有四步,分别是
创建非对称密钥、加密、服务端把私钥给客户端、删除原来的对称加密模式
(1)实验如图,使用ssh-keygen
命令产生非对称密钥,这里我用了非交互的命令,大家可以直接使用ssh-keygen
,只是多了确认文件保存路径和设置密码步骤。私钥放在/root/.ssh/id_rsa
,公钥放在/root/.ssh/id_rsa.pub
。
(2)ssh-copy-id -i /root/.ssh/id_rsa.pub username@serverip
,服务器使用公钥加密99这个ip的root用户
(3)scp /root/.ssh/id_rsa root@172.25.254.88: /root/.ssh/id_rsa
表示服务端把私钥给IP叫88的root用户。那么此时,客户端远程登录,还是会提示输入密码(对称的)
(4)vim设置/etc/ssh/sshd_config
文件,在第73行,把原来的对称密码认证方式取消,现在客户端再登录时不需要输入密码,直接用非对称的私钥成功登录。
4、sshd 安全优化参数详解
打开/etc/ssh/sshd_config
文件,里面有很多参数可以更改,但是为了实验效果需要提前输入setenforce 0
和systemctl disable --now firewalld
,关闭防火墙。如图。
(1)可以更改端口号,在17行,修改完成后,systemctl restart sshd
服务端重启,客户端就无法登录了,需要指定端口号才可以登录。
(2)PermitRootLogin yes|no
对超级用户登陆是否禁止
(3)PasswordAuthentication yes|no
是否开启原始密码认证方式(上面已经用过)
(4)AllowUsers westos
用户白名单,只允许列表里的人登录,其他的不允许登录,即使root也不允许
(5)DenyUsers lee
用户黑名单,不允许列表里的人登录