目录
一、SSH服务
1.1 什么是SSH服务器
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度
优点:
-
数据传输是加密的,可以防止信息泄漏
-
数据传输是压缩的,可以提高传输速度
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。
OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
执行"systemctl start sshd"命令即可启动sshd 服务
sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)
OpenSSH
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
- 客户端配置文件:/etc/ssh/ssh_config
1.2 SSH原理
-
客户端发起链接请求
-
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
-
客户端生成密钥对
-
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
-
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
-
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
-
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
1.3 服务端配置
1.3.1 常用配置
[root@localhost ~]# vim /etc/ssh/sshd_config
#进入服务端的配置文件
Port 220
关闭selinux
1.3.2 使用秘钥对及免交互验证登录
登录原理:
-
用户/密码
-
基于秘钥免交互验证登录
用户/密码
-
客户端发起ssh请求,服务器会把自己的公钥发送给用户
-
用户会根据服务器发来的公钥对密码进行加密
-
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于秘钥免交互验证登录
-
首先在客户端生成一对密钥(ssh-keygen)
-
并将客户端的公钥ssh-copy-id 拷贝到服务端
-
当客户端再次发送一个连接请求,包括ip、用户名
-
服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串
-
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
-
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
[root@localhost ~]# ssh-keygen --help
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
#-t 表示加密方式,不加是随机
# dsa | ecdsa | ed25519 | rsa | rsa1 表示不同的加密算法
上面输入的密码是自己设置ecdsa加密后登录的密码,如果也不想要输入ecdsa密码,全部回车
思考:
设置免密登录后,服务端root改密码后,客户端还能登录吗
答案是可以登录的,因为已经根据密钥对来登录了,与root的密码无关
- 与用户密码无关
- 与IP地址无关
- 只与密钥对有关
1.4 安全
1.通过对比密钥判断是不是我们需要连接的机子
2. 限制可登录用户
[root@localhost ~]# vim /etc/ssh/sshd_config
#进入服务端的配置文件
1.5 ssh客户端
命令 | 功能 |
ssh | 远程安全登录(使用端口-p 22) |
scp | 远程安全复制 |
sftp | 安全ftp上下载 |
二、TCP Wrappers
在 Linux 系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、 HTTPD、OpenSSH 等。TCP Wrappers(TCP 封套)作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。
TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
2.1 策略的配置格式
(1)服务程序列表
服务程序列表可分为以下几类。
ALL:代表所有的服务
单个服务程序:如“vsftpd“
多个服务程序组成的列表:如“vsftpd,sshd”
(02)客户端地址列表
客户端地址列表可分为以下几类。
-
ALL:代表任何客户端地址。
-
LOCAL:代表本机地址。
-
单个 IP 地址:如“192.168.4.4”
-
网络段地址:如“192.168.4.0/255.255.255.0”
-
以“.”开始的域名:如“.bdqn.com”匹配 bdqn.com 域中的所有主机。
-
以“.”结束的网络地址:如“192.168.4.”匹配整个 192.168.4.0/24 网段
-
嵌入通配符“”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2”
-
匹配以 10.0.8.2 开头的所有 IP 地址。不可与以“.”开始或结束的模式混用
-
多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”
2.2访问控制的基本原则
allow的优先级高于deny
更多关于TCP Wrappers可以参考这篇文章
https://www.cnblogs.com/duzhaoqi/p/7607801.html
三、轻量级自动化运维工具pssh
3.1 简介
EPEL源中提供了多个自动化运维工具
-
pssh:基于python编写,可同时处理30台左右服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具,项目:http://code.google.com/p/parallel-ssh/
-
pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 可使用几种不同的远程shell服务,包括rsh,Kerberos IV和ssh,项目 https://pdsh.googlecode.com/
-
mussh:Multihost SSH wrapper,是一个shell脚本,允许使用命令在多个主机上通过ssh执行命令。 可使用ssh-agent和RSA/DSA密钥,以减少输入密码,项目MUltihost SSH Wrapper download | SourceForge.net
pssh命令选项参数
-H | 主机字符串,内容格式”[user@]host[:port]” |
-h | file:主机列表文件,内容格式”[user@]host[:port]” |
-A | 手动输入密码模式 |
-i | 每个服务器内部处理信息输出 |
-l | 登录使用的用户名 |
-p | 并发的线程数【可选】 |
-o | 输出的文件目录【可选】 |
-e | 错误输出文件【可选】 |
-t | TIMEOUT 超时时间设置,0无限制【可选】 |
-O | SSH的选项 |
-P | 打印出服务器返回信息 |
-v | 详细模式 |
--version | 查看版本 |
3.2 配置过程
192.168.109.132管理192.168.109.131和192.168.109.133
#在CentOS-Base.repo最后一行添加
# $releasever自动检测版本号
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0
#下载
yum install pssh -y
这里仅以管理两台台举例,想要管理多台ssh-copy-id IP地址 即可
#管理多台,写入一个文件
vim hosts.txt
cat hosts.txt
192.168.109.132
192.168.109.133
192.168.109.134
。。。。。。
pssh -h hosts.txt -i hostname
四、总结
我们在学习过程中可以使用轻量级自动化运维工具pssh来管理自己的机子,但是公司里面成百上千的服务器用不了