远程访问与控制——构建SSH远程登录服务

SSH 远程管理

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的 Telent(远程登录)、RSH(Remote Shell,远程执行令)RCP(Remote File Copy,远程文件复制)等应用相比,SSH 协议提供了更好的安全性。本节将以 OpenSSH 为例,介绍 Linux 服务器的远程管理及安全控制。OpenSSH 是实现 SSH协议的开源软件项目,适用于各种 UNIX、Linux 操作系统。关于 OpenSSH 项目的更多内容可以访问其官方网站 http://www.openssh.com。

配置 OpenSSH 服务端

在 CentOS 7.3 系统中,OpenSSH 服务器由 openssh、openssh-server 等软件包提供(默认已安装),并已将 sshd 添加为标准的系统服务。执行“systemctl start sshd”命令即可启动 sshd 服务,包括 root 在内的大部分用户(只要拥有合法的登录 Shell)都可以远程登录系统。

sshd 服务的配置文件默认位于/etc/ssh/sshd_config 目录下,正确调整相关配置项,可以进一步提高 sshd 远程登录的安全性。下面介绍最常用的一些配置项,关于 sshd_config 文件的更多配置可参考 man 手册页。

1.服务监听选项

sshd 服务使用的默认端口号为 22,必要时建议修改此端口号,并指定监听服务的具体IP 地址,以提高在网络中的隐蔽性。除此之外,SSH 协议的版本选用 V2 比 V1 的安全性要更好,禁用 DNS 反向解析可以提高服务器的响应速度。

2.用户登录控制

sshd 服务默认允许 root 用户登录,但在 Internet 中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登入,进入安全 Shell 环境后,根据实际需要使用 su 命令切换为 root 用户。

关于 sshd 服务的用户登录控制,通常应禁止 root 用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为 2 分钟)及最大重试次数,若超过限制后仍未能登录则断开连接。

3.登录验证方式

对于服务器的远程管理,除了用户账号的安全控制以外,登录验证的方式也非常重要。sshd 服务支持两种验证方式——密码验证、密钥对验证,可以设置只使用其中一种方式,也可以两种方式都启用。

Ø 密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。

Ø 密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在 Shell 中被广泛使用。

当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。

具体操作

ssh 远程登录

环境:开两台centos7虚拟机,主机名分别为test01和test02

1.在test01中,进入服务端配置文件/etc/ssh/sshd_config,在配置文件中开启服务器端口(只需把次配置项前面的“#”去掉即可),开启后保存退出,然后重启sshd服务

[root@test01 ~]# vim /etc/ssh/sshd_config     //进入服务端配置文件

 17 Port 22                      //服务器端口22
 18 #AddressFamily any           
 19 #ListenAddress 0.0.0.0       //监听IPV4地址
 20 #ListenAddress ::            //监听IPV6地址

[root@test01 ~]# systemctl restart sshd       //重启sshd服务

2.在test02上远程访问test01,命令格式为:ssh 要访问主机的用户名@要访问主机的IP地址,

通过 ssh 命令可以远程登录 sshd 服务,为用户提供一个安全的 Shell 环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。例如,若要登录主机192.168.180.133 ,以对方服务器的 root 用户进行验证,可以执行以下操作。

Last login: Mon Sep  9 21:24:41 2019
[root@test02 ~]# ssh root@192.168.180.133
The authenticity of host '192.168.180.133 (192.168.180.133)' can't be established.
ECDSA key fingerprint is SHA256:6YN0ru3diu2LzQ7JaGsXBzq9FB6EJ+usVZHiDWavG5E.
ECDSA key fingerprint is MD5:11:7f:9a:c5:ee:48:cb:b5:bb:09:55:de:51:4d:ff:c2.
Are you sure you want to continue connecting (yes/no)? yes            //接受密钥
Warning: Permanently added '192.168.180.133' (ECDSA) to the list of known hosts.
root@192.168.180.133's password:                                      //输入密码
Last login: Mon Sep  9 21:24:02 2019
[root@test01 ~]# 

当用户第一次登录 SSH 服务器时,必须接受服务器发来的 ECDSA 密钥(根据提示输入“yes”)后才能继续验证。接收的密钥信息将保存到~/.ssh/known_hosts 文件中。密码验证成功以后,即可登录目标服务器的命令行环境中了,就好像把客户端的显示器、键盘连接到服务器一样。

3.如果要禁止root用户登录,可以到test01的配置文件中把相对应的配置文件进行修改,把配置项前的“#”去掉开启服务,然后把后面的yes改为no即可,修改好以后保存退出,然后重启sshd服务,具体操作如下:

 [root@test01 ~]# vim /etc/ssh/sshd_config

 37 #LoginGraceTime 2m
 38 PermitRootLogin no           //禁止root用户进行有效登录吧
 39 #StrictModes yes
 40 #MaxAuthTries 6
 41 #MaxSessions 10

[root@test01 ~]# systemctl restart sshd       

继续在test02上进行远程访问,直接远程root用户会被拒绝

[root@test01 ~]# ssh root@192.168.180.133
root@192.168.180.133's password: 
Permission denied, please try again.
root@192.168.180.133's password: 

如果非要登录root用户,也有另一种办法,例如,先在test01上创建个用户lisi,然后再test02上用lisi用户进行远程登录,然后用lisi用户作为跳板,切换到root用户,具体操作如下:

在test01上创建lisi用户

[root@test01 ~]# useradd lisi          //创建lisi用户
[root@test01 ~]# passwd lisi
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

在test02上进行远程登录

[root@test01 ~]# ssh lisi@192.168.180.133
lisi@192.168.180.133's password: 
[lisi@test01 ~]$ su - root
密码:
上一次登录:一 9月  9 21:40:20 CST 2019从 192.168.180.134pts/2 上
最后一次失败的登录:一 9月  9 22:03:41 CST 2019从 192.168.180.133ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@test01 ~]# 

4.通过上述的例子可以看出,即使禁用了root用户进行有效登录,但是仍能通过所谓的普通用户作为跳板进行登录,所以这种情况在现实场景中是很不安全的,为了提高安全性,可以通过“PAM模块的验证方式”去实现。在test01中进入PAM配置文件中开启wheel模块认证,再去test02上进行登录验证,当用lisi用户再去切换至root用户时,会拒绝,那么就提高了安全性,具体操作如下:

[root@test01 ~]# vim /etc/pam.d/su

#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid           //开启wheel模块认证
auth            substack        system-auth
auth            include         postlogin
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         include         postlogin
session         optional        pam_xauth.so
[root@test02 ~]# ssh lisi@192.168.180.133
lisi@192.168.180.133's password: 
Last login: Mon Sep  9 22:18:30 2019 from 192.168.180.133
[lisi@test01 ~]$ su - root
密码:
su: 拒绝权限
[lisi@test01 ~]$ 

验证次数

1.在ssh的配置文件中还有一个配置项是验证次数,默认显示是六次,但是实际却不是,假设故意输错,输入三次后就会自动退出,操作如下:

开启相对应配置项,退出后重启服务

[root@test01 ~]# vim /etc/ssh/sshd_config 

37 #LoginGraceTime 2m
 38 PermitRootLogin no
 39 #StrictModes yes
 40 MaxAuthTries 6               //默认验证次数为六次
 41 #MaxSessions 10

[root@test01 ~]# systemctl restart sshd

在test02上进行验证,有意输错三次便会自动退出

[root@test02 ~]# ssh lisi@192.168.180.133
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@test02 ~]# 

2.如果是上述情况,那么验证次数设为六次就毫无意义,那如何让六次变得有意义,方法如下:

在test02上进行,还是用ssh命令,后面跟选项“-o”,继续在后面跟上一个参数,把次数设置为8,进行远程登录,同样还是故意输错,会发现六次后自动退出,那么此时六次就变得有意义,具体操作如下:

[root@test02 ~]# ssh -o NumberOfPasswordPrompts=8 lisi@192.168.180.133
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 
Received disconnect from 192.168.180.133 port 22:2: Too many authentication failures
Authentication failed.
[root@test02 ~]# 

黑白名单

1.进入配置文件中,在空白处添加白名单“AllowUsers shan@192.168.180.134”,仅允许shan用户在IP地址为192.168.180.134的主机上进行远程登录,配置好以后保存退出,并重启服务,具体操作如下:

[root@test01 ~]# vim /etc/ssh/sshd_config 

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 6
#MaxSessions 10
AllowUsers shan@192.168.180.134                    //白名单
#PubkeyAuthentication yes

[root@test01 ~]# systemctl restart sshd

在test02上进行登录验证

[root@test02 ~]# ssh shan@192.168.180.133
shan@192.168.180.133's password: 
Last login: Sun Sep  8 01:40:30 2019

[root@test02 ~]# ssh lisi@192.168.180.133
lisi@192.168.180.133's password: 
Permission denied, please try again.
lisi@192.168.180.133's password: 

2.黑名单“DenyUsers shan@192.168.180.134”,除了shan用户不能再在IP地址为192.168.180.134的主机上进行远程登录,其他用户都可以,配置好以后保存退出,并重启服务,具体操作如下:

[root@test01 ~]# vim /etc/ssh/sshd_config 

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
MaxAuthTries 6
#MaxSessions 10
DenyUsers shan@192.168.180.134             //黑名单
#PubkeyAuthentication yes

[root@test01 ~]# systemctl restart sshd

在test02上进行验证

[root@test02 ~]# ssh shan@192.168.180.133
shan@192.168.180.133's password: 
Permission denied, please try again.
shan@192.168.180.133's password: 
Permission denied, please try again.
shan@192.168.180.133's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

[root@test02 ~]# ssh lisi@192.168.180.133
lisi@192.168.180.133's password: 
Last failed login: Mon Sep  9 23:13:16 CST 2019 from 192.168.180.134 on ssh:notty
There were 13 failed login attempts since the last successful login.
Last login: Mon Sep  9 22:36:10 2019 from 192.168.180.134

[root@test02 ~]# ssh root@192.168.180.133
root@192.168.180.133's password: 
Last failed login: Mon Sep  9 22:36:25 CST 2019 on pts/2
There was 1 failed login attempt since the last successful login.
Last login: Mon Sep  9 22:18:40 2019
[root@test01 ~]# 

结论:

白名单——仅允许,上面有的都可以,没有的都不可以

黑名单——仅拒绝,上面有的都不可以,没有的都可以

注意:在真实的企业环境中,用ssh协议的话,做白名单会更加安全可靠。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值