远程访问及控制ssh
1. SSH 远程管理
- SSH是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能;
- 对通信双方的数据传输进行加密处理,其中包括用户登录时输入的用户口令;
- 与早期的Telnet(远程登录)、rsh(远程执行命令)、rcp(远程文件控制)等相比,SSH协议提供了更好的安全性。

1.1 配置Open SSH 服务端
- SSH服务端的配置文件:/etc/ssh/sshd_config
- 服务监听选项:端口(默认Tcp的22号端口)、地址、协议版本和DNS反向解析等
1 vim /etc/ssh/sshd_config #服务端配置文件 2 #Port 22 #监听端口为 22 3 #AddressFamily any #监听地址为任意网卡,也可以指定 Openssh 服务器的具体 ip 4 #LoginGraceTime 2m #登录验证时间为2分钟 5 #PermitRootLogin yes #禁止 root 用户登录 6 #MaxAuthTries 6 #最大重试次数为 6 7 #PermitEmptyPasswords no #禁止空密码用户登录 8 #UseDNS no #禁用 DNS 反向解析,以提高服务器的响应速度 9 ---------------------------------------------------------------------------------- 10 配置允许和禁止用户登录:加@表示限制ip,注意允许和禁止不要同时使用!! 11 AllowUsers zhangsan #允许 zhangsan 登录 12 AllowUsers zhangsan@192.168.80.80 #只允许 zhangsan 通过 192.168.80.80 登录 13 DenyUsers lisi #禁止 lisi 登录
例:只允许zhangsang、lisi、wangwu用户登录,且其中lisi用户仅能够从IP地址为192.168.80.80的主机远程登录。
1 vim /etc/ssh/sshd_config #修改服务端配置文件 2 ------------------------------------------------------- 3 AllowUsers zhangsan lisi@192.168.80.80 wangwu #这里为添加的配置 4 ------------------------------------------------------- 5 systemctl reload sshd #修改完记得重新加载
1.2 sshd 支持的登陆验证方式
sshd服务支持登录验证方式有:密码验证和密钥对验证,可以设置只使用其中一种,也可以都启用。
- 密码验证:
以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。
- 密钥对验证:
要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。
- 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
- 不能根据一个密码来推算出另一个密钥;
- 公钥对外公开,私钥只有私钥的持有人才知道。
- 公钥和私钥要配对使用,如果用公钥对数据进行加密,只有用相对应的私钥才能解密;如果用私钥对数据进行加密,那么只有对应的公钥才能解密。
- 当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密码对验证方式;若没有特殊要求,则两种方式都可以。
1.3 使用 SSH 客户端程序
- SSH客户端的配置文件:/etc/ssh/ssh_config
- 通过 ssh 命令可以远程登录 sshd 服务,为用户提供一个安全的 Shell 环境,以便于对服务器进行管理和维护。
- 命令行格式:
1 ssh [选项] zhangsan@192.168.80.77 #指定登录用户、目标主机地址作为参数 2 ssh -p 20 zhangsan@192.168.80.77 #-p为指定端口
- 当用户第一次登录 SSH 服务器时,必须接受服务器发来的 RSA 密钥(需要根据提示输入:yes)后才能继续验证,接受的密钥信息将保存到 ~/.ssh/known_hosts 文件中,密码验证成功以后,就登录到目标服务器的命令行环境中了。如下:
1 The authenticity of host '192.168.80.77 (192.168.80.77)' can't be established. 2 ECDSA key fingerprint is SHA256:sRKz60ZIwaIjOXejXaNdZp69M/aygMdkunCMR7a3u+4. 3 ECDSA key fingerprint is MD5:be:42:dd:a7:be:d9:96:f3:9d:8a:0c:20:b6:65:c9:2e. 4 Are you sure you want to continue connecting (yes/no)? yes #接受密钥 5 root@192.168.80.77's password: #输入密码
- 如果 sshd 服务器使用了非默认的端口号(如:1234),则在登录时必须通过 -p 选项指定端口号:
1 ssh -p 1234 root@192.168.80.77 #指定端口 2 root@192.168.80.77's password: #输入密码
2. 密钥对验证的 SSH 体系
2.1 配置密钥对验证的步骤
① 在客户端创建密钥对:
② 将公钥文件上传至服务器:
③ 在服务器中导入公钥文本:
④ 在服务端验证并设置ssh 代理功能,实现免交互登录:
3. TCP Wrapper 访问控制
3.1 TCP Wrapper 概述
- TCP Wrappers (TCP封套)
- 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
- 大多数 Linux 发行版,TCP Wrappers 是默认提供的功能。rpm -q tcp_ wrappers 查看是否安装程序。
- TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。
- 对应的两个策略文件为 /etc/hosts.allow 和 /etc/hosts.deny,分别用来设置允许和拒绝的策略。
3.2 TCP Wrapper 保护机制
TCP Wrappers保护机制的两种实现方式:
- 直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序。
- 由其他网络服务程序调用libwrap.so. 链接库,不需要运行tcpd程序。此方式的应用更加广泛,也更有效率。
- 使用ldd命令可以查看程序的libwrap.so. 链接库;
- 命令:ldd $ (which ssh)
3.3 TCP Wrapper 配置格式
(1)命令行格式:<服务程序列表> : <客户端地址列表>
(2)服务程序列表:
- ALL:代表所有的服务。
- 单个服务程序:如“vsftpd"。
- 多个服务程序组成的列表:如“vsftpd, sshd”。
(3)客户端地址列表:
- ALL:代表任何客户端地址。
- LOCAL:代表本机地址。
- 多个地址以逗号分隔。
- 允许使用通配符 “*” 和 "?” ,前者代表任意长度字符,后者仅代表一个字符。
- 网段地址,如"192. 168.80.”或者192. 168.80.0/255.255.255.0。
- 区域地址,如". benet . com"匹配benet.com 域中的所有主机。
3.4 TCP Wrapper 访问机制
(1)查看策略:
- 首先检查 /etc/hosts.allow 文件,如果找到相匹配的策略,则允许访问;
- 否则继续检查 /etc/hosts.deny 文件, 如果找到相匹配的策略,则拒绝访问;
- 如果检查上述两个文件都找不到相匹配的策略,则允许访问。
(2)“允许所有,拒绝个别”
- 只需在 /etc/hosts.deny 文件中添加相应的拒绝策略。
(3)“允许个别,拒绝所有”
- 除了在 /etc/hosts.allow 中添加允许策略之外,还需要在 /etc/hosts.deny 文件中设置 "ALL : ALL" 的拒绝策略。
3.5 TCP Wrapper 配置步骤
例:只希望从IP地址为192.168.80.80的主机访问sshd服务,其他地址被拒绝。
① 主机1(192.168.80.77)的/etc/ hosts.allow配置文件内增加192.168.80.80主机2的ip;
② 主机1(192.168.80.77)的/etc/ hosts.deny配置文件内增加拒绝所有的配置;
③ 主机2(192.168.80.80)可以正常远程登录到主机1上;
④ 主机2(192.168.80.78)被拒绝登录到主机1上。


浙公网安备 33010602011771号