openssh加密远程管理
OpenSSH简介
OpenSSH是SSH(Secure Shell)协议的开源实现,主要用于安全地远程登录到计算机系统。它提供了一种加密的方式来进行远程命令行登录、执行命令以及管理文件传输等操作,从而确保了数据在传输过程中的安全性。OpenSSH支持多种认证方式,包括密码认证和公钥认证,并且默认情况下使用强加密算法来保护通信的安全性。传统的网络服务程序,如 FTP、POP 和 Telnet 其本质上都是不安全的,因为它们在默认状态下网络上用明文传送数据。而 SSH 更为可靠,专为远程登录会话和其他网络服务提供安全性的协议,透过 SSH 可以对所有传输的数据进行加密。
ssh的主要功能
- 加密的远程管理
- 加密的远程文件传输 scp。scp 默认连接的端口是 22 端口,如果 ssh 不是使用标准的 22 端口则使用-P(P 大写)指定。
- 端口映射
openssh的安装
本次案例使用的centos7操作系统进行示例
[root@test ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
OpenSSH 的安装方式因操作系统和环境不同而有所差异,主要安装方式有两种:
正常情况下,在安装centos系统的时候,系统都会默认安装openssh,可以使用如下命令进行查看是否安装
[root@test ~]# rpm -qa | grep openssh
openssh-clients-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
使用rpm -qa | grep openssh 命令,如果在输出结果中看到,openssh-clients和openssh-server的软件包,那么说明该系统已经安装了openssh,只需要启用即可。
如果没有安装的话,可以使用如下命令进行安装
yum -y install openssh.x86_64 openssh-server-7.4p1-16.el7.x86_64 openssh-7.4p1-16.el7.x86_64
- openssh-clients-7.4p1-16.el7.x86_64 提供 SSH 客户端工具(用于连接远程主机)
- openssh-7.4p1-16.el7.x86_64 OpenSSH 的核心基础库和通用文件
- openssh-server-7.4p1-16.el7.x86_64 提供 SSH 服务端(允许别人连接本机)
完成了openssh的安装,接下来只需要启动openss即可,如果该软件包之前已经默认安装了的,那么该服务也是默认开机自启动的
启动openssh
[root@test ~]# systemctl start sshd
查看openssh服务的状态
[root@test ~]# systemctl status sshd
● sshd.service – OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2026-01-02 18:48:48 CST; 23h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1037 (sshd)
Tasks: 1
Memory: 5.6M
CGroup: /system.slice/sshd.service
└─1037 /usr/sbin/sshd -D
openssh的默认端口号是22端口,也可以通过查看端口号,判断该服务是否已经启动(如下所示,该服务已经启动并正常运行)
[root@test ~]# ss -luntp | grep 22
tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=1037,fd=3))
ssh加密的远程管理
使用ssh可以更好的便于远程管理服务器,通过网络即可实现,在同一网络内任何地方都能登录到服务器内部对服务器进行管理。远程管理命令格式为:ssh username@ip
以windows的cmd为例,通过ssh 用户名@IP地址 的方式,我登录到了10.201.9.133这台服务器中,并且可以执行相关命令进行管理

不过在日常使用中,我们一般不会使用windows自带的cmd去远程管理服务器,都是使用一些三方的软件工具,例如:MobaXterm,没有该工具的小伙伴可以去网上找资源下载下,接下来,介绍下如何使用MobaXterm并通过ssh远程管理服务器。
打开MobaXterm,点击左上角的Session按钮


因为我们使用ssh去进行远程管理的,所以这里的会话选项也选择ssh

点击ok,输入root用户的密码,即可登录到服务器中。
ssh配置文件
ssh作为一个服务,自然少不了配置文件,平常也可以通过配置文件进行管理,一下列举一些常用的配置
ssh配置文件路径: /etc/ssh/sshd_config
vi /etc/ssh/sshd_config ← 用vi打开SSH的配置文件
AddressFamliy any;支持那 IP 协议;比如 ipv4,ipv6,;默认 any;
Port 22 :SSH 端口号配置,默认 22;
Protocol 2 ; SSH 协议的 2 版本,推荐 2 版本
LoginGraceTime 2m; 输入密码时的等待时长默认 2 分钟,超出则断开会话;
ListenAddress IP:监听哪个 IP,默认监听所有 IP;
PermitRootlogin Yes\\No: 控制 root 登录;
PermitEmptyPasswords No:控制空密码登录
PasswordAuthentication Yes:建议禁止密码登录,使用 key 验证登录
Gatewayports Yes\\No:端口转发功能;
StrickHostKeyChecking Ask\\No;登录询问;
MaxAuthTries 6 ;密码最多试错次数,是设置数值的一半次数;
MaxSessions 10;同一个会话的连接次数;默认 10 个;
PubkeyAuthentication yes ;公钥的身份验证开启;
Banner /path/file ;用户 SSH 登录前的提示信息;
ClientAliveInterval 30: 默认 0 永久连接,可自定义无操作等待时间;
UseDNS No : DNS 解析;
Maxstartup: 10:30:100:支持 10 个并发连接,超过 10 个,以 30%概率拒绝,超过 60%的并发则
全部拒绝;
AllowUsers user1 user2 user3;允许用户登录,其他人拒绝;
DenyUsers user1 user2 :拒绝用户登录;
AllowUsers 和 DenyUsers 只能配置一个,若设置允许用户,其他用户都不能登录,若设置拒绝
用户,则其他用户都可以登录;
AllowGroups :允许组访问,如果没有可以添加;
DenyGroups :拒绝组访问,如果没有可以添加;
有些时候,只允许部分网段的客户端通过ssh登录到服务器,以最大限度减少不安全因素
可修改一下两个文件
/etc/hosts.deny 和 /etc/hosts.allow 是 Linux/Unix 系统中用于基于主机的访问控制(Host-based Access Control) 的两个配置文件,它们由 TCP Wrappers(tcpd)机制提供支持,用于限制或允许特定服务(如 SSH、FTP、Telnet 等)对远程主机的访问。
典型配置示例
1、只允许特定 IP 访问 SSH
[root@node1 ~]# vi /etc/hosts.allow
sshd: 10.201.9.1
[root@node1 ~]# vi /etc/hosts.deny
sshd: ALL
只有10.201.9.1 能 SSH 登录,其他全部拒绝。
使用除了10.201.9.1 以外的客户端登录ssh提示如下:

2、修改 ssh 端口号
为了安全考虑想要修改默认端口号的话就需要编辑 sshd 配置文件了,vim /etc/ssh/sshd_config
这个文件,这里把#Port 22 这个字段前面的#去掉,再把 22 改成自己要端口就可以了,然后重
启 ssh 服务。
vim /etc/ssh/sshd_config
#Port 22 将#注释去掉,改22为2200。

重启sshd服务器
systemctl restart sshd
查看端口是否监听
[root@node2 local]# ss -luntp | grep 2200
tcp LISTEN 0 128 *:2200 *:* users:(("sshd",pid=4294,fd=3))
tcp LISTEN 0 128 :::2200 :::* users:(("sshd",pid=4294,fd=4))
3、ssh服务访问控制
SSH服务的访问控制是保障服务器安全的重要手段。通过合理配置,可以有效防止未授权访问、暴力破解等安全威胁。本次介绍的是通过修改sshd_config中的配置来针对用户或者是用户组的服务访问控制。主要涉及到的配置有以下几点:
- AllowUsers/AllowGroups:只允许指定用户 或组
- DenyUsers/DenyGroups :明确拒绝某些用户或组
注意:AllowUsers 和 DenyUsers 同时存在时,Allow 优先级更高。
- 实例:
当前系统中有一个名字叫做aaa的用户,需求:禁止aaa用户进行远程登录,配置如下:
[root@node1 ~]# vi /etc/ssh/sshd_config
DenyUsers aaa
#修改完配置之后需要重启sshd服务
[root@node1 ~]# systemctl restart sshd
添加完以上配置之后,在使用aaa用户从其他主机进行远程登录(提示“Permission denied”)
验证:

如果是要禁止多个用户登录的话,就可以考虑使用DenyGroups的方式进行配置。配置如下:
# 创建一个nologin的组
[root@node1 ~]# groupadd nologin
#将bbb用户和ccc用户添加到nologin组中
[root@node1 ~]# groupmems -g nologin -a bbb
[root@node1 ~]# groupmems -g nologin -a ccc
[root@node1 ~]# groupmems -g nologin -l
bbb ccc
# 修改ssh主配置文件,添加DenyGroups 参数
[root@node1 ~]# vi /etc/ssh/sshd_config
DenyGroups nologin
#重启sshd服务
[root@node1 ~]# systemctl restart sshd
验证:

ssh 密钥级身份认证
目前 SSH 连接还需要输入密码,下面将介绍使用密钥进行连接,免去了输入密码的烦恼。
示例环境:
| centos-manager | 管理节点 | 10.201.9.134 | CentOS Linux 7 | 部署控制、监控、调度 |
| centos-node1 | 工作节点 | 10.201.9.133 | CentOS Linux 7 | 运行应用容器或服务 |
以上两台服务器,当manager去通过ssh管理node1的时候,使用密钥连接,不需要输入密码。
- 在manager服务器上生产密钥
首先创建.ssh 的目录
[root@centos-manager ~] mkdir /root/.ssh
然后使用 ssh-keygen 生成密钥,ssh-keygen -t rsa,生成密钥的过程中一路回车就可以。
[root@centos-manager] ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:C2PberhNIbtTSp4+U8U2APnEfyODRcHO1m3yBwXi4N8 root@node2
The key's randomart image is:
+—[RSA 2048]—-+
| .+ o+.. .. |
| . +.oo . .|
| o O.... . |
| o %.=.+ |
| = S+ =.=E. |
| ..Boo . .|
| oo*+ . |
| O=. |
| .=*. |
+—-[SHA256]—–+
[root@centos-manager ~] cd /root/.ssh/
[root@centos-manager .ssh] ll
-rw——-. 1 root root 1679 1月 1 14:25 id_rsa
-rw-r–r–. 1 root root 399 1月 1 14:25 id_rsa.pub
密钥生成完成之后,进入到/root/.ssh 的目录中查看,会多出两个文件,这两个文件就是SSH 密钥对
id_rsa —— 私钥(Private Key)存储在本地,用于证明你的身份。当你尝试 SSH 登录到其他服务器时,SSH 客户端会使用此私钥对服务端的进行签名。
id_rsa.pub —— 公钥(Public Key)内容需要被复制到目标服务器的 ~/.ssh/authorized_keys 文件中。当你用私钥 id_rsa 尝试登录时,目标服务器会用这个公钥验证你的签名是否合法
- 通过 ssh-copy-id 工具,将公钥传给目标主机manager,然后就可以通过证书无口令登录。
[root@centos-manager .ssh] ssh-copy-id root@10.201.9.133
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
root@10.201.9.133's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@10.201.9.133'"
and check to make sure that only the key(s) you wanted were added.
ssh-copy-id 此命令会自动将 id_rsa.pub 的内容追加到 centos-node1(目标服务器) 的 /root/.ssh/authorized_keys 中。
- 免密登录,再次使用ssh登录的时候,就可以实现免密登录
[root@centos-manager .ssh] ssh root@10.201.9.133
Last login: Sat Jan 3 19:33:13 2026 from 10.201.9.140
[root@node1 ~] ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.201.9.133 netmask 255.255.255.0 broadcast 10.201.9.255
inet6 fe80::d995:c7fb:4b15:c27c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:66:93:0c txqueuelen 1000 (Ethernet)
RX packets 47801 bytes 21827862 (20.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55501 bytes 77025853 (73.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
加密的远程文件传输 scp
scp(Secure Copy Protocol)是 Linux/Unix 系统中用于在本地与远程主机之间安全地复制文件和目录的命令。它基于 SSH 协议,因此传输过程是加密的,安全性高。
- 基本语法:scp [选项] 源路径 目标路径
- 常用选项:
| -r | 递归复制整个目录 |
| -P port | 指定 SSH 端口(注意是大写 P) |
| -p | 保留文件的修改时间、访问时间和权限模式 |
| -C | 启用压缩(加快传输速度) |
| -v | 显示详细输出(调试用) |
- 常用用法示例:
# scp 本地文件路径 用户名@IP地址:传到对面主机的路径
#将本机文件上传到目标服务器指定目录
[root@node1 opt]# scp /opt/test.sh root@10.201.9.140:/opt
root@10.201.9.140's password:
test.sh 100% 210 286.5KB/s 00:00
# 从远程主机拉取文件到本地
# scp 用户名@IP地址:远程文件路径 本地路径
[root@node1 opt]# scp root@10.201.9.140:/opt/1.txt /opt/
root@10.201.9.140's password:
1.txt 100% 0 0.0KB/s 00:00
基于 ssh 的跳板机配置:
基于 SSH 的跳板机(也称为“堡垒机”或“跳转主机”,Jump Host / Bastion Host)是一种常见的安全架构,用于控制对内部网络中服务器的访问。用户必须先通过跳板机,再连接到目标主机,从而减少直接暴露内部主机的风险。
登录方式:
- 用户 → 跳板机) → 目标主机
- 所有 SSH 连接都通过跳板机中转
示例:
| 跳板机 | 10.201.9.133 | 用于中转 SSH 连接的堡垒机 |
| 目标服务器 | 10.201.9.140 | 实际需要访问的节点(Node) |
如图所示:客户端无法访问目标服务器node,而是需要通过jumpserver跳板机进行中转才能够访问。

- 服务端配置(跳板机)
[root@jumper .ssh]# useradd jumpserver
# 限制跳板机用户的权限,禁用 shell 登录
[root@jumper .ssh]# usermod -s /usr/sbin/nologin jumpserver
#更新jumpserver的密码
[root@jumper .ssh]# passwd jumpserver
客户端中通过跳板机进行登录
这里以windows的cmd为例,可以看到我们的主机如果是直接访问目标主机的话,是无法通过ssh直接连接的。

通过跳板机进行登录:语法ssh -J 跳板机用户@跳板机IP地址 目标主机用户@目标主机IP地址,可以登录成功,这种方式,虽然可以跳转登录,但是还是暴露了ip地址,更推荐使用ssh端口转发的方式进行跳转登录



