Linux 远程访问和控制(SSH、TCP Wrappers)


前言

纪念我的第101篇原创博客,The road is obstacle-packed and long,But you will get through if you keep going。
在这里插入图片描述


一、SSH 远程管理

1、SSH 协议

  • SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能;
  • SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,Server会检查数据来源的正确性。因此SSH协议具有很好的安全性。
  • SSH 服务是一个守护进程(demon),系统后台监听客户端的连接,SSH 服务端的进程名为 sshd , 负责实时监听客户端的请求,包括公共秘钥等交换等信息。

2、SSH 的优点

  • 数据传输是加密的,可以防止信息泄漏,具有很好的安全性;
  • 数据传输是压缩的,可以提高传输速度;
  • SSH 客户端连接工具:Putty、Xshell、CRT、Securecrt、Mobaxterm等工具进行连接
  • SSH 服务端使用服务:OpenSSH
  • 使用SSH 远程登录成功后,就可以在目的主机上使用对应用户进行操作
    在这里插入图片描述

3、SSH的使用方法

ssh 远程用户@远程主机地址  [-p 端口号]
如: ssh zhangsan@192.168.1.100 -p 22
#指定-p 需关闭防火墙

#查询ssh端口
netstat -natp | grep sshd

4、SSH的工作机制

 服务器启动的时候自己产生一个密钥,本地的SSH客户端发送连接请求到SSH服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥给客户端,此时客户端将本地私钥和服务器的公钥结合成密钥对key,发回给服务器端,建立连接通过key-pair数据传输。

SSH2支持RSA和DSA密钥
DSA:digital signature Algorithm 数字签名
RSA:既可以数字签名又可以加密

二、OpenSSH

2.1 OpenSSH 介绍

  • OpenSSH 是实现 SSH 协议的开源软件项目,适用于各种 UNIX、Linux 操作系统。
  • CentOS 7系统默认已安装 Openssh 相关软件包,并已将 sshd 服务添加为开机自启。(openssh 的服务名称: sshd
  • sshd 服务默认使用的是TCP的 22 端口
  • sshd 服务端主程序:/usr/sbin/sshd
  • systemctl restart sshd 命令即可重新启动 sshd 服务
  • sshd 客户端 默认配置文件:/etc/ssh/ssh_config
  • sshd 服务端 默认配置文件:/etc/ssh/sshd_config
    在这里插入图片描述

2.2 查看OpenSSH 服务端配置

/etc/ssh/sshd_config 配置文件的常用选项设置(服务安全加固配置):

vim /etc/ssh/sshd_config

#sshd 主要配置项默认参数
Port 22 								#监听端口为 22
ListenAddress 0.0.0.0 					#监听地址为任意网段,也可以指定OpenSSH服务器的具体IP

LoginGraceTime 2m 						#登录验证时间为 2 分钟
PermitRootLogin no 						#【禁止 root 用户登录】,此项工作中常用
MaxAuthTries 6 							#最大重试次数为 6

PermitEmptyPasswords no 				#禁止空密码用户登录
UseDNS no 								#禁用 DNS 反向解析,以提高服务器的响应速度(反向解析很少有)

修改完这个配置文件需要重启服务:systemctl restart sshd

可以打开本地sheel,使用 ssh 命令测试连接:
在这里插入图片描述

2.3 AllowUsers 和 DenyUsers

即用户的 白名单 和 黑名单;

vim /etc/ssh/sshd_config

#例子:
#设置白名单: 只允许zhangsan、xiaohong 用户登录,多个用户以空格分隔
#并且其中 xiaohong 用户仅能够从IP地址为 12.1.1.12 的主机远程登录
AllowUsers zhangsan xiaohong@12.1.1.12

#设置黑名单: 禁止某些用户登录,用法于AllowUsers类似(注意不要同时使用, 【黑名单白名单不能同时使用】)
DenyUsers zhangsan

比如:进入服务端 配置文件 /etc/sshd_config 设置 DenyUsers lisi wangwu ,效果是 这两人 不能使用 ssh 登录101主机:
在这里插入图片描述
验证成功,除了lisi wangwu 被SSH拒绝 , 其他人都能登录。黑名单白名单同时只能设置一个
在这里插入图片描述

2.4 SCP远程复制

#从服务器上下载
scp root@192.168.31.101:/etc/passwd /opt/passwd1.txt	#将远程主机中的/etc/passwd 文件复制到本机

#向服务器传输资料
scp -r /opt/clientFile/ root@192.168.31.101:/opt/		#将本机的/root/clientFile/ 目录复制到远程主机/opt/目录

在这里插入图片描述

2.5 SFTP 传输文件

SFTP 是安全的 FTP,端口号也是22,由于使用了加密/解密技术,所以传输效率比普通的FTP要低,但安全性更高。操作方法与 FTP几乎一样。

sftp zhangsan@192.168.31.101
zhangsan@192.168.31.101's password:   #输入密码
sftp> pwd
sftp> ls
sftp> get 文件名		#下载文件到ftp目录
sftp> put 文件名		#上传文件到ftp目录
sftp> quit			#退出

在这里插入图片描述

2.6 sshd 服务的两种验证方式

实验见 2.7 章 和 2.8 章。

1 . 密码验证

对服务器中系统用户的登录名、密码进行验证。简便,但可能会被暴力破解。

2 . 密钥对验证

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

公钥 和 私钥 的关系:

  • 公钥 和 私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密。
  • 不能根据一个密钥来推算出另一个密钥。
  • 公钥对外公开,私钥只有私钥的持有人(客户机)才知道。

当密码验证、密钥对验证都启用时,服务器将 优先使用密钥对验证。可根据实际情况设置验证方式。

vim /etc/ssh/sshd_config
PasswordAuthentication yes 						#启用密码验证
PubkeyAuthentication yes 						#启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys 		#指定公钥库文件


在这里插入图片描述

2.7 SSH登录密码验证

在这里插入图片描述

执行 ssh zhangsan@192.168.31.102

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

在这里插入图片描述
exit 登出远程控制
在这里插入图片描述

2.8 配置密钥对验证(实操)

实验要求:一台设置成客户端(192.168.31.102),一台设置成服务端(192.168.31.101),通过密钥对登录对方账户。

把文件复制到对方的主机,通过管道符号输出到服务器当中的公钥文本中,完成密钥对的验证。

(1)在客户端创建密钥对

通过 ssh-keygen 工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)。
useradd li1
echo "123456" | passwd --stdin li1
su - li1

ssh-keygen -t ecdsa             #会自动在家目录生成一个 .ssh文件  id_ecdsa 私钥文件 id_ecdsa.pub 公钥文件
#如果是ssh-keygen -t ecdsa -A ,-A 表示随即用每一个加密算法,用 man ssh-keygen 查看使用方法

Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa): 	#指定私钥位置,直接回车使用默认位置
Created directory '/home/admin/.ssh'.			    #生成的私钥、公钥文件默认存放在宿主目录中的隐藏目录.ssh/
Enter passphrase (empty for no passphrase): 		#设置私钥的密码
Enter same passphrase again: 						#确认输入

ls -l .ssh/id_ecdsa
#id_ecdsa是私钥文件,权限默认为600;id_ecdsa.pub是公钥文件,用来提供给 SSH 服务器

创建一个用户 dbk,设置密码在这里插入图片描述
在这里插入图片描述
生成密钥在用户家目录下的 家目录/.ssh/ 隐藏目录下。

(2)将公钥文件上传至服务器

id_ecdsa.pub 是生成的公钥文件名,里面保存的密钥

方法一:此方法可直接在服务器的/home/zhangsan/.ssh/目录中导入 客户机中的公钥文件
cd ~/.ssh/
ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.31.101
#指定公钥文件到服务端当中

方法二:
#客户端:先将公钥文件复制到服务端
scp ~/.ssh/id_ecdsa.pub root@192.168.31.101:/opt
#服务端:
mkdir /home/zhangsan/.ssh/  #在zhangsan的家目录下创建.ssh文件,没有这个文件的需要创建
cat /tmp/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys   
#将复制来的公钥文件导入到authorized_keys中(没有authorized_keys会自动创建)

cat /home/zhangsan/.ssh/authorized_keys   #查看authorized_keys文件
#cd ~/.ssh/

在这里使用方法一 在客户机里将公钥文件上传到服务器上:在这里插入图片描述
客户机里zhangsan能看到这个公钥文件,里面都是密钥字符串。
在这里插入图片描述

(3)在【客户端】使用密钥对验证,进行登录

ssh zhangsan@192.168.31.101
Enter passphrase for key '/home/li1/.ssh/id_ecdsa':        #输入私钥的密码
Last login: Sun Dec 13 13:31:58 2020

在这里插入图片描述
(4)在客户机设置ssh代理功能,实现免密登录

如果不进行代理免密的话,下载一次文件,客户端就要输入一次密码,设置之后只要第一次输一次密码就行。

ssh-agent bash
ssh-add 
Enter passphrase for /home/li1/.ssh/id_ecdsa:   #输入私钥的密码
Identity added: /home/li1/.ssh/id_ecdsa (/home/li1/.ssh/id_ecdsa)

ssh zhangsan@192.168.163.10
Last login: Sun Dec 13 13:32:47 2020 from 192.168.163.11

在这里插入图片描述


也可以使用 RSA 加密算法,生成的密钥文件不一样:
在这里插入图片描述

三、TCP Wrappers 访问控制

  • TCP Wrappers 像一张防护网、一个过滤器,保护着TCP服务程序,它会监听TCP服务程序的端口,并执行一次安全检测过程;外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
  • 在 众多 Linux 发行版本中,TCP Wrappers 是默认提供的功能。
  • 如果没有安装,使用 rpm -q tcp_wrappers 安装

3.1 TCP Wrapper 保护机制的实现方式

实现方式有两种:

  • 第一种:直接使用 tcpd 程序对其他服务程序进行保护,需要运行 tcpd 程序。

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

  • 使用 ldd 命令可以查看程序的 libwrap.so.* 链接共享库 (shared library),格式:

ldd $ (which ssh vsftpd)

比如查看 vsftpd 协议的链接库:
在这里插入图片描述

3.2 TCP Wrappers 的访问策略

  • TCP Wrappers 保护对象为各种网络服务程序,针对访在这里插入代码片问服务的 客户端地址 进行访问控制;
  • 对应的两个策略文件分别为 /etc/hosts.allow/etc/hosts.deny,分别用来设置 允许和拒绝的策略
格式:
<服务程序列表>:<客户端地址列表>

(1)服务程序列表

  • ALL:代表所有的服务;
  • 单个服务程序:如 “vsftpd”
  • 多个服务程序组成的列表用,隔开:如 “vsftpd,sshd”

(2)客户端地址列表

  • ALL:代表任何客户端地址;
  • LOCAL:代表本机地址;
  • 多个地址以逗号分隔;
  • 允许使用通配符 “?”(代表一个字符) 和 “*”(代表任意长度字符);
  • 网段地址,格式,如 192.168.31. 或者 192.168.31.0/255.255.255.0
  • 区域地址,格式,如 “.benet.com” 匹配 bdqn.com 域中的所有主机。

3.3 TCP Wrappers 机制的基本原则

首先检查 /etc/hosts.allow 文件,如果找到相匹配的策略,则允许访问;
否则继续检查 /etc/hosts.deny 文件,如果找到相匹配的策略,则拒绝访问;
如果检查上述两个文件都找不到相匹配的策略,则允许访问(默认的情况就是该访问方式)。

常用配置为:

  • 允许所有,拒绝个别”: 只需在 /etc/hosts.deny 文件中添加相应的拒绝策略;
    或者
  • 允许个别,拒绝所有”:除了在 /etc/hosts.allow 中添加允许策略之外,还需要在 /etc/hosts.deny 文件中设置 “ALL:ALL” 的拒绝策略(所有协议:所有主机)。

例:若只希望从IP地址为12.0.0.1的主机 或者 位于192.168.31.0/24网段的主机访问sshd服务,其他地址被拒绝。

vi /etc/hosts.allow
sshd:12.0.0.1,192.168.31.*
 sshd:12.0.0.1,192.168.31.0/255.255.255.0
vi /etc/hosts.deny
sshd:ALL

3.4 Wrappers 实验

/etc/hosts.deny 和 /etc/hosts.allow 两个文件只有 root 用户有权限修改

192.168.31.102 客户机配置:
在这里插入图片描述
1 . deny 拒绝实验
在这里插入图片描述在这里插入图片描述

192.168.31.101 尝试通过ssh远程 .31.102 ,allow 无配置,放过,deny 有配置,被拒绝远程失败。

在这里插入图片描述
2 . allow 实验
192.168.31.102 /etc/hosts.allow 中设置:
在这里插入图片描述
192.168.31.101 执行:
在这里插入图片描述首先检查 /etc/hosts.allow 文件,如果找到相匹配的策略,就允许访问,不再执行deny;

3 . 拒绝某个协议下的所有主机
/etc/hosts.deny 黑名单中设置 sshd,httpd:ALL
在这里插入图片描述
这时候所有 用 ssh 和 http 协议访问该主机的都访问不了,如浏览器输入 http://192.168.31.102
这时候在 /etc/hosts.allow 中加上 httpd,vsftpd 等, 就能够使用http、vsftp 协议访问了。

总结

SSH 知识小结:

  1. SSH 是安全的加密协议,用于远程连接 Linux服务器;
  2. SSH 的默认端口是 22,安全协议版本是 SSH2;
  3. SSH 服务器端主要包含2个服务功能SSH连接 和 SFTP服务器 ;
  4. SSH 客户端包含ssh连接命令 和 远程拷贝scp命令等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值