Linux中的远程登陆服务
- OpenSSH的功能
- 虚拟机桥接配置
- SSH连接
- ssh常用参数
- ssh加密方式
- 不对称加密的效果
- 非交互的生成密钥
- 移除密钥的影响
- SSHD安全性优化调整
- 连接端口修改
- 关闭密码登陆
- 禁止超级用户登陆
- 用户登录黑白名单
- 配置参数总结
OpenSSH的功能
SSH也算是常听到的功能了,能实现对主机的远程登录.它的实现同样基于C/S架构,即需要客户端和服务端.
其中,ssh负责客户端功能,sshd负责服务端功能.
Secure Shell
Secure Shell Daemon 安装包为openssh-server
主配置文件位于/etc/ssh/sshd_config
在这一章会设计主机对虚拟机的连接以及远程登陆等操作,因此会涉及部分虚拟机网络的配置.
虚拟机桥接配置
首先为了排除不可预料的问题,首先对系统网络环境进行监控和控制.
接下来对虚拟机网络进行配置
设置完成,如果在虚拟机中能ping通主机IP则说明配置无误,反之按上文操作检查.
SSH连接
配置好了网络就要进入正式阶段了.
首先为了排除原有用户和root用户对于实验的不确定干扰,我们需要创建一个全新的用户用于进行这次实验.创建用户采用useradd
命令.
首次登陆时才会询问是否连接,同意后下次不会再提示该信息.
当SSH连接成功后会在本机生成记录文件,而在远端主机也会写入登陆记录.这里对本机文件进行查看.
但如果你删除了远程主机(这里为虚拟机)中的连接记录,就会出现本机认为自己连接过而远程主机没有相关记录的问题,本机的记录信息失效,并出现报错提示.删除失效的连接记录后可以重新进行访问,并视作初次访问.
对具体过程的解析如下
当输入yes后,远程主机向本机发送身份公钥,并保存到~/.ssh/know_hosts文件中.
当再次连接时远端主机会持有私钥对连接进行身份验证.
因此修改了文件内容自然也会被拒绝连接了.
vim ~/.ssh/know_hosts
ssh常用参数
-l
-i
-X
-f
-o
-t
以下对其中重要的几个进行讲解.
ssh -i root 172.168.50.2
指定了远程用户登陆时的用户
ssh -i root 172.168.50.2 -o "StrictHostKeyChecking=no"
这里时对于-o
参数的一个举例,还有其他功能的自定义参数可以自行进行查找.
连接跳板
跳板的作用与其他几个参数不太相同,单独拿出来说可能比较好理解.
打个比方,你用A主机连接B主机并用B主机连接C主机.
那么在C主机上的登陆记录所显示的就是B的IP地址和信息.
那么这时,我们就称B为你连接C主机的跳板.
当然,也可以通过对跳板作用的验证来加深理解.
如图,对连接设备检查时现实的IP为跳板机,而非我用于连接的本机.
ssh加密方式
对称加密
刚才我们使用了密码对远程主机进行连接,如果你去查看远程主机的连接记录会发现,其中的加密字符串与本机的~/.ssh/know_hosts
文件中的相同.这种加密方式也叫做对称加密.
对称加密的特点
加密和解密使用同一串字符
容易泄露
容易遗忘
可暴力破解
简言之,并不安全
因此也出现了一种更为安全的加密方式----不对称加密.
不对称加密
不对称加密,顾名思义,加密和解密使用的并不是同一串字符.
加密用公钥,解密用私钥.
即使其中一个被盗用了,只要更新套件,被盗用的也会失效.
通过设置来屏蔽密码登陆后也能让攻击者无法通过无密钥方式登录服务器.
生成非对称加密密钥
ssh-keygen
如图所示,在确定相关选项后会在本地生成一对密钥.但是这对密钥都在本地显然是不会对服务器起作用的,因此要用本地的密钥对服务器进行加密.
ssh-copy-id -i 公钥文件 登陆用户@服务器地址
当然,仅仅是进行加密了还是不够的,为了确认是否确实是使用本地的公钥对服务器进行加密的,我们可以去服务端对加密内容进行确认.在进行不对称加密后,服务端会生成authorized_keys
文件.
当然,其内容与本地的私钥并不相同.
不对称加密的效果
不对称加密的实现目的是解决对称加密的安全性问题.那么反过来想,如果使用了不对称加密还要输入密码岂不是本末倒置了.事实也是如此,使用不对称加密后,远程登录服务器时会对公钥私钥进行验证而不需要再输入密码,实现了免密登陆.
非交互的生成密钥
上文中使用ssh-keygen
命令时,系统提示了大量操作信息如存放在哪里,是否需要输入密码等等,部分环境下我们不希望进行交互输入,那么可以使用此方式对这一操作进行简化.
ssh-keygen -f 密钥存放位置 -P ""
移除密钥的影响
为了保证安全性,当移除公钥/私钥中任意一个时,再次连接时都会提示密钥失效,保证了登陆的安全性,当泄漏时也更容易进行安全补救.
SSHD安全性优化调整
连接端口修改
在基础的连接设置上,我们还可以 通过对服务端的sshd服务进行安全性优化提高连接安全性.但在进行实验前还需要进行部分系统调整,使得后续操作可行.
首先保证SELinux工作模式为Disabled
,负责会影响后续操作.
同时,将系统火墙暂时关闭,避免对于端口的过滤影响连接.
上文提到过,sshd的配置文件位于/etc/ssh/sshd_config
,下文操作均为对服务端(这里为虚拟机)的sshd配置文件的修改.
服务端默认的连接端口为22
端口,此处更改为9961
端口.
修改配置后并不会立即生效,需要对服务进行重载.
之后对服务修改情况进行验证.
使用客户端进行远程登录.
可以看到,默认的22
端口被拒绝,而指定9961
端口登陆成功.
关闭密码登陆
为保证系统安全性我们启用了非对称加密登陆,当然也可以更进一步:将密码登陆关闭.这样在进行远程登陆时就仅能使用密钥验证的方式进行登陆,大大加强了系统的安全性.
当然,修改配置后也需要重启服务才能生效.
生效后如无密钥仍可输入密码,但即使密码输入正确也无法登陆了.
禁止超级用户登陆
超级用户掌握着系统的控制权限,将超级用户开放给远程登录就相当于对远程登陆用户不加限制.为了保证安全性,部分场合需要禁用超级用户登陆.
这么操作仅仅禁用了超级用户登录,并不影响登陆后进行用户切换.
su - root
用户登录黑白名单
可以对超级用户登陆进行限制,作扩张解释也应该可以对其他用户的登陆进行限制.因此用户黑白名单就应运而生了.就如同字面意思,被加入用户黑名单中的用户均无法用于远程登陆;而当白名单存在时,仅有被加入白名单中的用户可以进行远程登陆.
以下进行效果验证.
如图,超级用户被加入了黑名单,无法远程登陆,实现了与超级用户禁止相同的功效.
配置参数总结
上文中对连接安全性进行了优化,文末对修改过的配置内容进行总结.
Port
PermitRootLogin yes
PasswordAuthentication yes
AllowUsers 用户名...
DenyUsers 用户名... systemctl restart sshd