openssh加密远程管理

openssh加密远程管理

OpenSSH简介

OpenSSH是SSH(Secure Shell)协议的开源实现,主要用于安全地远程登录到计算机系统。它提供了一种加密的方式来进行远程命令行登录、执行命令以及管理文件传输等操作,从而确保了数据在传输过程中的安全性。OpenSSH支持多种认证方式,包括密码认证和公钥认证,并且默认情况下使用强加密算法来保护通信的安全性。传统的网络服务程序,如 FTP、POP 和 Telnet 其本质上都是不安全的,因为它们在默认状态下网络上用明文传送数据。而 SSH 更为可靠,专为远程登录会话和其他网络服务提供安全性的协议,透过 SSH 可以对所有传输的数据进行加密。

ssh的主要功能

  • 加密的远程管理
  • 加密的远程文件传输 scp。scp 默认连接的端口是 22 端口,如果 ssh 不是使用标准的 22 端口则使用-P(P 大写)指定
  • 端口映射

openssh的安装

本次案例使用的centos7操作系统进行示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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 的安装方式因操作系统和环境不同而有所差异,主要安装方式有两种:

  1. 通过系统包管理器安装(最推荐、本次示例使用)
  2. 从源代码编译安装(适用于需要特定版本、定制功能或系统无包管理器的场景(如嵌入式系统、安全加固环境))

正常情况下,在安装centos系统的时候,系统都会默认安装openssh,可以使用如下命令进行查看是否安装

1
2
3
4
[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,只需要启用即可。
如果没有安装的话,可以使用如下命令进行安装

1
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即可,如果该软件包之前已经默认安装了的,那么该服务也是默认开机自启动的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
启动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
因为我们使用ssh去进行远程管理的,所以这里的会话选项也选择ssh

在这里插入图片描述
点击ok,输入root用户的密码,即可登录到服务器中。

ssh配置文件

ssh作为一个服务,自然少不了配置文件,平常也可以通过配置文件进行管理,一下列举一些常用的配置
ssh配置文件路径: /etc/ssh/sshd_config

vi /etc/ssh/sshd_config ← 用vi打开SSH的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
1
2
3
4
5
[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 服务。

1
2
vim /etc/ssh/sshd_config
#Port 22 将#注释去掉,改22为2200。

在这里插入图片描述
重启sshd服务器
systemctl restart sshd

查看端口是否监听

1
2
3
[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用户进行远程登录,配置如下:
1
2
3
4
5
[root@node1 ~]# vi /etc/ssh/sshd_config
DenyUsers aaa

#修改完配置之后需要重启sshd服务
[root@node1 ~]# systemctl restart sshd

添加完以上配置之后,在使用aaa用户从其他主机进行远程登录(提示“Permission denied”)
验证:
在这里插入图片描述
如果是要禁止多个用户登录的话,就可以考虑使用DenyGroups的方式进行配置。配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建一个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 连接还需要输入密码,下面将介绍使用密钥进行连接,免去了输入密码的烦恼。
示例环境:

主机名 角色 IP 地址 操作系统版本 用途说明
centos-manager 管理节点 10.201.9.134 CentOS Linux 7 部署控制、监控、调度
centos-node1 工作节点 10.201.9.133 CentOS Linux 7 运行应用容器或服务

以上两台服务器,当manager去通过ssh管理node1的时候,使用密钥连接,不需要输入密码。

  • 在manager服务器上生产密钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
首先创建.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,然后就可以通过证书无口令登录。
1
2
3
4
5
6
7
8
9
10
[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登录的时候,就可以实现免密登录
1
2
3
4
5
6
7
8
9
10
11
[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 显示详细输出(调试用)
  • 常用用法示例:
1
2
3
4
5
6
7
8
9
10
11
# 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 连接都通过跳板机中转

示例:

角色 IP 地址 说明
跳板机 10.201.9.133 用于中转 SSH 连接的堡垒机
目标服务器 10.201.9.140 实际需要访问的节点(Node)

如图所示:客户端无法访问目标服务器node,而是需要通过jumpserver跳板机进行中转才能够访问。
在这里插入图片描述

  • 服务端配置(跳板机)
1
2
3
4
5
[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端口转发的方式进行跳转登录
在这里插入图片描述


openssh加密远程管理
https://www.situgou.top/2026/01/18/openssh加密远程管理/
作者
xqj_Blog
发布于
2026年1月18日
许可协议