概述:
远程登录是 Linux 运维、服务器管理的入门核心技能。在实际生产环境中,我们几乎不会物理接触机房服务器,所有日常运维、指令操作、文件管理都依赖远程连接实现。本文基于完整理论、加密原理、配置详解与实操案例,全方位讲解 Linux 远程登录体系,重点拆解目前行业主流的 SSH 协议,从原理到命令、从基础配置到安全优化,新手也能循序渐进掌握。
目录
一、远程登录的基础概念
1.1 核心概念
1.2 主要功能
1.3 远程登录主流分类
(1)文字接口远程登录
(2)图形接口远程登录
1.4 SSH 协议详细介绍
二、SSH 核心加密技术简介
三、SSH 完整工作过程
3.1 版本协商阶段
3.2 密钥和算法协商阶段
3.3 认证阶段
四、SSH 服务安装与核心配置详解
4.1 安装 SSH 服务
4.2 主配置文件解析
五、SSH 综合实战实验
5.1 实验 1:修改 SSH 默认监听端口
5.2 实验 2:禁止 root 账户远程登录
常见排错(理解即可,谨慎操作!!!):修改配置后仍可使用 root 密码登录
5.3 实验 3:配置用户登录白名单
5.4 实验 4:虚拟机之间配置密钥免密登录
5.5 实验 5:MobaXterm 工具配置密钥登录
1. 服务端创建密钥存储文件
2. 在 MobaXterm 中生成密钥(对应你截图的界面)
3. 把公钥上传到服务器
4. 在 MobaXterm 中配置密钥登录
六、常见故障排查总结
七、全文总结
一、远程登录的基础概念
1.1 核心概念
远程连接服务器,指通过文字接口或图形接口,在本地终端远程登录 Linux 主机,获取系统 Shell 交互操作界面。远程登录后执行指令、操作文件、配置服务的体验,与直接在服务器本地操作完全一致,打破了物理空间的限制。
1.2 主要功能
1.3 远程登录主流分类
按照交互形式,远程登录主要分为文字接口和图形接口两大类,两类协议适用场景、安全级别差异明显。
(1)文字接口远程登录
文字接口依靠命令行交互,占用资源少、传输效率高,是运维工作中使用最广泛的方式,又分为明文传输与加密传输两大派系。
- 明文传输协议:典型代表为 Telnet、RSH。此类协议在网络中直接传输原始数据,账号、密码、执行命令均不做任何加密,安全漏洞极大,目前企业环境中已基本淘汰。
我们可以借助 Wireshark 抓包工具直观验证其安全缺陷:
# 服务端安装Telnet服务
[root@hahaha ~]# yum install telnet-server -y
# 启动Telnet监听服务
[root@hahaha ~]# systemctl start telnet.socket


使用 远程连接新建 Telnet 会话完成连接,同时在本地电脑安装 Wireshark 抓包软件,选择虚拟机网卡 VMnet8 开启流量捕获。在 Telnet 命令行中执行ip a等指令,选中对应数据包右键选择追踪 TCP 流,可以清晰看到所有账号、密码、操作命令均以明文展示,极易被窃取。



# 关闭上述telnet连接,建立ssh连接,查看是否为加密传输
- 加密传输协议:以SSH为绝对主流,现已全面替代 Telnet 等明文协议。SSH 通过专业加密算法对传输数据包进行全量加密,即便流量被抓取,攻击者也无法解析有效内容,安全性拉满,是当前 Linux 远程登录的标准方案。

(2)图形接口远程登录
该方式依托可视化桌面实现远程操作,常用协议包含 XDMCP、VNC、XRDP 等。主要适用于需要图形化软件、可视化操作的场景,缺点是网络开销大、安全性弱于 SSH,生产环境中使用频率较低。
1.4 SSH 协议详细介绍
SSH 全称 Secure Shell Protocol(安全壳程序协议),由 IETF 网络工作组制定,默认监听 TCP 22 端口。该协议依托成熟的加密技术,保障远程通信全程安全。 SSH 集成两大实用服务能力:
二、SSH 核心加密技术简介
SSH 的安全通信能力,核心依托非对称密钥系统实现,该系统依靠公钥和私钥一对独立密钥,完成数据加密与解密全流程,二者分工明确、不可混用。
- 公钥(public key):对外公开分发,所有远程设备都可获取。主要作用是对将要传输的明文数据进行加密。
- 私钥(private key):属于设备专属密钥,由所有者妥善保管,严禁对外泄露。唯一作用是解密使用对应公钥加密后的数据包。
非对称加密完美解决了网络明文传输的安全问题,也是 SSH 协议能够广泛普及的核心原因。
三、SSH 完整工作过程
客户端与 Linux 服务端建立 SSH 连接,是一套标准化的交互流程,整体分为五个核心阶段,环环相扣,缺一不可。
表格
| 版本号协商阶段 | SSH 分为 SSH1、SSH2 两大协议版本,通信双方自动协商,确定最终使用的协议版本 |
| 密钥和算法协商阶段 | SSH 支持多种加密、校验、压缩算法,双方比对自身支持列表,敲定统一算法组合 |
| 认证阶段 | 客户端提交身份信息,服务端对客户端进行身份合法性校验 |
| 会话请求阶段 | 身份认证通过后,客户端正式向服务端发送会话建立请求 |
| 交互会话阶段 | 会话创建完成,双方进入正常数据交互状态,可执行各类运维指令 |
3.1 版本协商阶段
服务端启动 sshd 服务后,会持续监听本机 22 端口,时刻等待客户端接入。 客户端发起 TCP 连接请求,TCP 链路成功建立后,服务端率先发送版本标识报文,格式固定为 SSH-<主协议版本号>.<次协议版本号>.<软件版本号>。客户端解析报文并比对自身支持的协议版本:若客户端兼容服务端低版本,则沿用服务端版本;否则使用客户端自身版本,并将协商结果回传给服务端。
服务端校验版本兼容性,协商失败则直接断开 TCP 连接;协商成功则进入下一阶段。本阶段所有报文均为明文传输。
3.2 密钥和算法协商阶段
客户端与服务端互相发送算法协商报文,报文中包含双方支持的公钥算法、数据加密算法、消息验证码(MAC)算法、压缩算法等列表。经过交叉比对,确定本次通信统一使用的算法。
随后双方基于 DH 密钥交换算法、服务器主机密钥等参数,共同生成会话密钥与会话 ID。后续所有传输数据,都会通过该会话密钥进行加密、解密,全程保障通信安全。
会话密钥生成完整流程:
3.3 认证阶段
身份认证是 SSH 连接的关键环节,目前主流支持口令认证和密钥认证两种方式,可根据安全需求灵活选择。
基于口令的认证(密码登录) 客户端将用户名、登录密码通过会话密钥加密后发送至服务端。服务端解密获取明文账号密码,与本地系统用户信息进行比对,最终返回认证成功或失败结果。该方式配置简单,适合日常测试、内网环境。
基于密钥的认证(免密登录) 安全性远高于密码登录,是生产环境首选方案。流程如下: 客户端提前生成公私钥对,并将公钥上传至目标用户家目录下的 .ssh/authorized_keys 文件。认证时,服务端比对客户端公钥与本地文件内容,匹配一致则生成随机字符串,先后通过客户端公钥、会话密钥加密后回传。客户端解密字符串并再次加密传回,数据校验一致则认证通过。
若单次认证失败,客户端可根据服务端返回的认证方式重新尝试,达到最大认证次数后,服务端自动关闭连接。
四、SSH 服务安装与核心配置详解
4.1 安装 SSH 服务
主流 RHEL、CentOS、Rocky Linux 等系统可通过 yum 命令安装 SSH 服务,多数系统默认预装,可直接使用。
[root@hahaha ~]# yum install openssh-server
4.2 主配置文件解析
SSH 服务核心配置文件路径为 /etc/ssh/sshd_config,通过修改该文件可实现端口更改、权限管控、登录限制等安全配置,以下为高频核心参数详解:
[root@hahaha ~]# vim /etc/ssh/sshd_config
#Port 22 # SSH默认监听端口,取消注释可自定义端口,提升防暴力破解能力
#AddressFamily any # 支持IPv4、IPv6双协议栈
#ListenAddress 0.0.0.0 # 监听本机所有IPv4地址
#ListenAddress :: # 监听本机所有IPv6地址
#HostKey /etc/ssh/ssh_host_rsa_key # RSA算法主机私钥
#HostKey /etc/ssh/ssh_host_ecdsa_key # ECDSA算法主机私钥
#HostKey /etc/ssh/ssh_host_ed25519_key # ed25519算法主机私钥
#SyslogFacility AUTH # SSH登录日志存放至/var/log/secure
#LogLevel INFO # 日志记录级别
#LoginGraceTime 2m # 登录宽限时间,2分钟未输入密码自动断开
PermitRootLogin yes # 控制root管理员远程登录权限
#StrictModes yes # 检查用户目录、密钥文件权限
#MaxAuthTries 6 # 密码最大尝试次数
#MaxSessions 10 # 单服务器最大并发SSH会话数
AuthorizedKeysFile .ssh/authorized_keys # 密钥登录时,公钥存放路径
#PasswordAuthentication yes # 是否开启密码登录
#PermitEmptyPasswords no # 禁止空密码用户登录
Subsystem sftp /usr/libexec/openssh/sftp-server # 开启SFTP文件传输功能
AllowUsers user1 user2 # 自定义用户白名单,仅名单内用户可远程登录
五、SSH 综合实战实验
本节结合企业常用场景,设计 5 组实操实验,覆盖端口修改、账号限制、密钥免密、客户端工具登录等核心用法,所有命令均可直接复用。
5.1 实验 1:修改 SSH 默认监听端口
默认 22 端口是攻击者重点扫描对象,修改自定义端口可降低被暴力破解的风险。
编辑配置文件,修改端口号
[root@hahaha ~]# vim /etc/ssh/sshd_config
# 取消注释,将端口改为2222
Port 2222

重启 SSH 服务,安装网络工具并查看端口状态
[root@hahaha ~]# systemctl restart sshd
[root@hahaha ~]# yum install net-tools -y
[root@hahaha ~]# netstat -ntlp
# 查看服务器IP地址,用于客户端连接
[root@hahaha ~]# ip a


客户端登录测试
# 使用默认22端口登录,连接被拒绝
[root@localhost ~]# ssh root@192.168.22.128
ssh: connect to host 192.168.22.128 port 22: Connection refused
# 使用 -p 参数指定新端口登录
[root@localhost ~]# ssh -p 2222 root@192.168.22.128
# 首次连接输入yes确认主机指纹,输入密码即可登录
# 退出登录
[root@hahaha ~]# exit


温馨提示:做完实验记得将端口号改回22
5.2 实验 2:禁止 root 账户远程登录
root 为超级管理员,为避免高危风险,生产环境通常禁止 root 直接远程登录。 PermitRootLogin 参数支持四种配置规则:
表格
| yes | 允许 root 无限制远程登录 |
| no | 彻底禁止 root 远程登录 |
| prohibit-password | 仅允许密钥登录,禁止密码登录 |
| forced-commands only | 仅允许密钥执行指定命令 |
修改配置文件
[root@hahaha ~]# vim /etc/ssh/sshd_config
PermitRootLogin no

重启服务并测试
[root@hahaha ~]# systemctl restart sshd
# 客户端尝试root登录,权限被拒绝
[root@localhost ~]# ssh root@192.168.22.128
root@192.168.22.128's password:
Permission denied, please try again.
常见排错(理解即可,谨慎操作!!!):修改配置后仍可使用 root 密码登录
故障现象:已将 PermitRootLogin 设置为 no 并重启 sshd 服务,但依旧能通过 root 账号密码正常登录。
故障原因 CentOS/RHEL 8 及以上版本中,/etc/ssh/sshd_config.d/ 目录下的附属配置文件优先级高于主配置文件。系统安装阶段若勾选了「允许 root 密码登录 SSH」,会自动在该目录生成配置文件,强制设置 PermitRootLogin yes,覆盖主配置的规则。
排查与解决步骤
查看附属配置文件内容
[root@hahaha ~]# cat /etc/ssh/sshd_config.d/*.conf
可查看到文件内存在如下配置,这是导致配置失效的核心原因:
PermitRootLogin yes
删除高优先级附属配置文件
[root@hahaha ~]# rm -f /etc/ssh/sshd_config.d/*.conf
再次校验主配置文件
[root@hahaha ~]# grep -n PermitRootLogin /etc/ssh/sshd_config
# 确保仅保留一行有效配置,结果如下即可
41:PermitRootLogin no
重启 SSH 服务使配置生效
[root@hahaha ~]# systemctl restart sshd
客户端强制使用密码登录测试
[root@localhost ~]# ssh root@192.168.22.128
正常会提示权限拒绝,代表配置生效。
注:实验完成后将配置改回原样
5.3 实验 3:配置用户登录白名单
通过AllowUsers参数设置白名单,仅指定普通用户可远程登录,进一步收紧访问权限。
服务端新建测试用户并设置密码
[root@hahaha ~]# useradd test
[root@hahaha ~]# passwd test

添加白名单配置并重启服务
[root@hahaha ~]# vim /etc/ssh/sshd_config
AllowUsers test
[root@hahaha ~]# systemctl restart sshd


客户端功能验证
# 白名单用户正常登录
[root@localhost ~]# ssh test@192.168.22.128
# 输入yes及密码,登录成功,使用 Ctrl+D 可快速退出
# 非白名单root用户登录被拒绝
[root@localhost ~]# ssh root@192.168.22.128
root@192.168.22.128's password:
Permission denied, please try again


注:实验结束后将配置改回原样
5.4 实验 4:虚拟机之间配置密钥免密登录
ssh-keygen 是 SSH 密钥管理工具,可快速生成、转换密钥对,语法:ssh-keygen -t 密钥类型。执行后会在用户家目录生成.ssh隐藏目录,内含id_rsa(私钥)、id_rsa.pub(公钥)。
客户端生成 RSA 密钥对,全程回车使用默认配置
[root@localhost ~]# ssh-keygen -t rsa

一键上传公钥至服务端
[root@localhost ~]# ssh-copy-id root@192.168.22.128
# 输入yes确认主机,再输入服务端root密码,公钥自动写入 /root/.ssh/authorized_keys

免密登录测试
[root@localhost ~]# ssh root@192.168.22.128
# 无需输入密码,直接登录成功

双向免密:按照相同步骤在服务端执行密钥生成、公钥上传操作,即可实现两台主机互相免密登录。
服务器



5.5 实验 5:MobaXterm 工具配置密钥登录
Windows 端常用 MobaXterm、Xshell、FinalShell 等图形工具连接 Linux,本实验实现 MobaXterm 密钥免密登录。
1. 服务端创建密钥存储文件
[root@hahaha ~]# cd /root
[root@hahaha ~]# ls -a
[root@hahaha ~]# mkdir -p .ssh
[root@hahaha ~]# cd .ssh
[root@hahaha .ssh]# vim authorized_keys
2. 在 MobaXterm 中生成密钥(对应你截图的界面)
在你打开的 MobaXterm SSH Key Generator 窗口中,按以下步骤操作:

- Type of key to generate:选中 RSA
- Number of bits in a generated key:默认 2048 或改为 4096 都可以


3. 把公钥上传到服务器
- 用记事本打开刚才保存的 .pub 公钥文件,复制全部内容
- 粘贴到服务器 authorized_keys 文件中并保存退出
- 重启 SSH 服务使配置生效:
[root@hahaha .ssh]# systemctl restart sshd
4. 在 MobaXterm 中配置密钥登录

💡 补充小提示:
- 生成密钥时如果设置了密码,连接时需要输入一次密钥密码;不设置密码则直接免密。
- 服务器上 .ssh 目录权限要设为 700,authorized_keys 文件权限设为 600,否则 SSH 会拒绝读取: chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
六、常见故障排查总结
七、全文总结
SSH 作为 Linux 远程登录的标准协议,凭借高安全性、高兼容性成为运维必备技能。本文从远程登录基础概念、非对称加密原理、SSH 五阶段通信流程,到服务安装、配置文件解读、多场景实战实验,完成了全维度讲解。
日常使用中,推荐结合修改默认端口、限制 root 登录、密钥免密登录三大优化方案,兼顾使用便捷性与服务器安全。熟练掌握 SSH 相关操作,是深入学习 Linux 运维、网络服务、集群架构的重要基础。
网硕互联帮助中心



评论前必须登录!
注册