目录
第一步:编辑服务器的ssh配置文件(每次更改完成后都要重启sshd服务才能生效)
一、Openssh的功能
1、sshd服务的用途:答:可以实现通过网络在远程主机中开启安全的shell操作。
2、安装包: openssh-server
3、主配置文件:/etc/ssh/sshd_conf
4、默认端口:22
5、端口查看命令:<netstat antulpe>
6、客户端命令:ssh
二、ssh的用法
1、基本用法
ssh [-l 远程主机用户] <ip | hostname>
ssh -l root 172.25.254.250 #通过shell命令在250主机中以root身份开启远程shell.
ssh [email protected] #通过shell命令在250主机中以root身份开启远程shell.
2、第一次连接远程主机
这里先创建一个虚拟机<westosd>并将其IP地址设置为<172.25.254.250>。在真机中执行<ssh -l root 172.25.254.250>命令。可以看到第一次连接时需要认证,即是否确认把远程主机的身份公钥发送到真机,选择<yes>后完成认证,以后再连接的时候系统会自动核对</root/.ssh/know_host>中存储的远程主机的密钥与即将要连接的主机密钥是否一致,一致的话就不会再验证了。
当然也存在另一种情况,就是远程主机的的身份公钥因特殊情况更改了,会在本地主机已认证更改之前的身份密钥的情况下导致连接失败。这时候就需要对本地主机的认证列表中该IP地址对应的身份密钥进行删除,然后重新认证。接下来就模拟这种情况下的操作步骤。
(1)先将远程主机<westosd>中的身份密钥删除,然后重启sshd服务,需要用到以下两条命令:
rm -f ssh_host_* #删除身份认证密钥
systemctl restart sshd #重启sshd服务(重启后会重新生成身份认证密钥)
可以看到,在远程主机重新生成身份密钥后,密钥已经发生了改变。
(2)而本地主机中存储的此IP的密钥却没有更新。重新连接时两者的密码对不上,所以会造成认证失败。
(3)解决办法就是删除本地主机中存储的该远程主机身份密钥,然后重新认证并连接。可以看到重新认证后,本地主机中保存的远程主机的身份密钥已经更新。
3、ssh常用参数
ssh -l #指定登录用户
-i #指定私钥
-X #开启图形
-f #后台运行
-o #指定连接参数
-t #指定连接跳板
<-l>参数:可以选择登录远程主机的用户身份。
<-X>参数:开启远程主机的图形界面,这里以<gedit>为例,不加这个参数表示不开启图形,就没法打开此命令,加上这个参数后就可以打开这个命令了。
<-f>参数:防止程序占用终端。一般用于要在本地主机中打开远程主机的命令而又不登录远程主机的情况下。这里还以<gedit>为例,左边打开<gedit>命令后占用了终端,右边加上参数<-f>后就不占用终端了。
<-o>参数:指定连接参数。这里先将</home/westos/.ssh/know_host>文件中的认证密钥全部清空,然后重新连接远程主机“172.25.254.250”。如图所示,左边为默认参数的连接,在第一次连接过程中需要确定是否认证,右边使用参数<-o>在连接时取消了认证步骤,可以直接连上。
<-t>指定连接跳板。在实际工作环境中,目标主机指对公司内部的个别主机开放访问权限,我们无法直接访问该主机,这时候就需要通过被授权访问的主机作为跳板来访问目标主机。具体操作步骤是,先连接有访问目标主机权限的远程主机,再通过该主机访问目标主机。
这里以两台远程主机<westosa>和<westosd>为例。先访问<westosa>,再通过<westosa>访问<westosd>,由于两台远程主机之间没有建立认证,所以第一次连接的时后会要求认证。这样就可以在真机中通过<westosa>访问<westosd>了。另一方面,在远程主机<westosd>中使用<w -i >命令可以查看到,当前访问本机的IP是“172.25.254.100”<westosa>的身份。
三、sshd key认证
1、对称加密
缺点:加密和解密是同一串字符,容易泄漏、容易遗忘、可暴力破解
2、非对称加密
加密用公钥,解密用私钥。私钥不会被盗用,攻击者无法通过无密钥方式登录服务器。
3、生成非对称加密密钥
注意:非对称加密的密钥在服务器或客户端都可以进行
方法一:交互方式
在客户端上输入<ssh-keygen>,然后每步都用默认设置,就会在客户端生成一个公钥和一个私钥。公钥用来上锁,私钥用来解锁。
方法二:非交互方式(命令行)
ssh-keygen -f /root/.ssh/id_rsa -P ""
在shell窗口输入以上命令,其中<-f>参数表示私钥保存位置,<-P>表示验证密码(这里为空),执行此命令后就会在指定目录下生成公钥和私钥。
4、使用非对称密钥对服务器进行加密
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
把本机(172.25.254.150)的公钥(也就是锁子)发送给服务器的root用户(172.25.254.249),由于本机中存在开启公钥的私钥,所以再次连接此服务器时会自动验证私钥和公钥是否匹配,就不用再输入服务器密码了。
5、私钥选择
如果本地客户端有很多把私钥的话,就需要在登录服务器的时候指定用哪一把私钥,这时就需要加上参数<-i>来指定私钥了。
ssh -i /root/.ssh/id_rsa [email protected]
四、ssh安全优化参数详解
为了保证服务器的安全,就需要限制非授权用户不能访问服务器。所以为了开启服务器保护功能,需要在服务器中进行配置。这一步操作就叫做ssh安全优化。
第一步:编辑服务器的ssh配置文件(每次更改完成后都要重启sshd服务才能生效)
先使用<rpm -qc openssh-server>查询ssh服务的主配置文件,然后使用vim进入编辑。
第二步:设置以下参数
第73行:PasswordAuthentication yes|no #是否开启原始密码认证方式
第17行:Port 22 #默认端口是22,可以更改
第46行:PermitRootLogin yes|no #对超级用户登陆是否禁止
AllowUsers lee #用户白名单
DenyUsers lee #用户黑名单
(1)更改认证方式(原始密码认证或者key认证)
第73行<PasswordAuthentication yes|no>这一条是确定是否开启原始密码认证方式,“yes”时表示开启,客户端可以通过密码连接此服务器;“no”时表示关闭,客户端不能通过密码连接服务器,只有通过key认证的客户端可以连接。
(2)更改端口
第17行<Port 22 >可以更改端口,在更改端口前需要先执行命令<setenforce 0>来关闭端口限制服务。
更改完成后,客户端连接服务器时就需要加上指定连接端口,才能连接成功服务器。
ssh -l root 172.25.254.249 -p 2021
(3)用户白名单
在配置文件的第50行(随便哪行都可以)添加<AllowUsers westos>(如需设置多个用户,之间用逗号隔开),表示此服务器中所有用户都禁止被ssh命令连接,只有<westos>用户可以通过“ssh"命令被连接。
(4)用户黑名单
表示服务器中的所有用户都可以通过ssh被连接,除了黑名单内的用户(多个用户之间用逗号隔开)