一、SSH远程访问

SSH (Secure Shell)协议

  • 是一种安全通道协议
  • 对通信数据进行了加密处理,用于远程管理

    OpenSSH

  • 服务名称: sshd
  • 服务端主程序: /usr/sbin/sshd
  • 服务端配置文件: /etc/ssh/sshd_ config

SSH远程管理

SSH(SecureShell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。
SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性。
网络
SSH客户端<------------->SSH服务端
数据传输是加密的,可以防止信息泄漏
数据传输是压缩的,可以提高传输速度
SSH客户端: Putty、 Xshell、 CRT
SSH服务端: OpenSSH
OpenSSH是实现SSH协议的开源软件项目,适用于各种UNIX、Linux操作系统。
CentOS 7系统默认已安装openssh相关软件包,并已将sshd 服务添加为开机自启动。
执行“systemctl start sshd" 命令即可启动sshd 服务
sshd服务使用的默认端口号为22
sshd服务的默认配置文件是/etc/ssh/sshd_ config
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。

SSH原理

公钥传输原理

  • 客户端发起链接请求
  • 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
    客户端生成密钥对
  • 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
  • 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
  • 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯会被加密
  • 登录

==登录 方法一:==

ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port

当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是root的话,当连接另一台主机时也是用root用户登录时,可以直接使用ssh   IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。

==登录 方法二:==

ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port

-l :-l 选项,指定登录名称。

-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)

配置OpenSSH服务端

Snipaste_20211212_195327.png

Snipaste_20211212_200405.png
Snipaste_20211212_200808.png

::: hljs-center

配置文件常用设置选项

:::

sshd服务支持登录验证方式

  • password验证: 以服务器中本地系统用户的登录名称、password进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇password暴力解析问题时防御能力比较弱。

  • 密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。

  • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;

    不能根据一个password来推算出另一个密钥;
    公钥对外公开,私钥只有私钥的持有人才知道。
    基于密钥常用配置项

基于密钥常用配置项

#生成密钥文件
[root@localhost ~]# ssh-keygen -t ecdsa
(如果设置免密登录,则重新设置,不设置password,一路回车)
#将公钥文件导入对方用户的注意路径
[root@localhost .ssh]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.59.117
#登录客户机

二、TCP Wrappers 访问控制

Snipaste_20211212_202405.png
::: hljs-center

TCP Wrappers工作原理

:::

  • TCP Wrappers 将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
  • 大多数 Linux 发行版,TCP Wrappers 是默认提供的功能。

保护机制的两种实现方式

  • 由其他网络服务程序调用 libwrap.so.* 链接库,不需要运行 tcpd 程序。此方式的应用更加广泛,也更有效率

*查看程序的 libwrap.so. 链接库——ldd命令**

ldd [参数] [文件名]

常用参数 说明
-v 详细信息模式,打印所有相关信息
-u 打印未使用的直接依赖
-d 执行重定位和报告任何丢失的对象
-r 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数
--help 显示帮助信息

==注==:文件需要写上绝对路径,可以使用which命令查询文件的绝对路径
,也可以两条命令一起使用:ldd $(which sshd)。

TCP Wrappers 的访问策略

==TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。==
对应的两个策略文件为 /etc/hosts.allow 和 /etc/hosts.deny,分别用来设置允许和拒绝的策略。

格式:
[服务程序列表] :[客户端地址列表]

1、服务程序列表
ALL:代表所有的服务;
单个服务程序:如“vsftpd”;
多个服务程序组成的列表:如“vsftpd,sshd”;
2、客户端地址列表
ALL:代表任何客户端地址;
LOCAL:代表本机地址;
多个地址以逗号分隔;
3、允许使用通配符
*:代表任意长度字符;
?:仅代表一个字符。

TCP Wrappers 机制的基本原则

 *1、首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;

 2、否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;

 3、如果检查上述两个文件都找不到相匹配的策略,则允许访问。

#允许所有,拒绝少数
只需在/etc/hosts.deny文件中添加相应的拒绝策略

#允许少数,拒绝所有
除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts.deny文件中设置“ALL:ALL”的拒绝策略。