目录
前言
纪念我的第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 知识小结:
- SSH 是安全的加密协议,用于远程连接 Linux服务器;
- SSH 的默认端口是 22,安全协议版本是 SSH2;
- SSH 服务器端主要包含2个服务功能SSH连接 和 SFTP服务器 ;
- SSH 客户端包含ssh连接命令 和 远程拷贝scp命令等。