配置 Linux 主机远程登录,真正容易出问题的通常不是输入一条 SSH 命令,而是账号权限、监听端口、认证方式和防火墙没有同时对齐。无论是维护办公室里的 Ubuntu 主机,还是管理云平台上的 Rocky Linux 实例,都建议按下面 7 个步骤逐项确认,避免修改配置后把自己锁在系统外。
一、先确认远程登录条件
开始前需要准备四项信息:目标主机的可达地址、SSH 端口、可用账号,以及对应的密码或私钥。Linux 主机远程登录一般使用 SSH,默认端口是 TCP 22,但管理员可能将其调整为其他端口。端口改变并不等于安全性自动提高,真正重要的是认证策略、访问来源和系统更新。
如果主机位于家庭或办公内网,外部设备通常不能直接访问内网地址,可能还需要 VPN、路由转发或云平台的安全组规则。先确认网络路径,再排查 SSH 服务,效率更高。
二、创建专用登录账号
不要让多人共用 root,也不建议把日常操作全部放在 root 会话中。使用管理员已有的本地账号执行以下操作,用户名可按实际环境替换:
- 执行 sudo useradd -m -s /bin/bash deployer 创建账号。
- 需要管理软件和服务时,将其加入系统管理员组。例如 Debian、Ubuntu 常用 sudo usermod -aG sudo deployer;RHEL、Rocky Linux 常用 sudo usermod -aG wheel deployer。
- 为账号设置临时密码:sudo passwd deployer。如果最终采用密钥认证,密码也应使用较长、唯一的组合。
账号创建后,先在本机通过控制台或当前会话确认 sudo 权限正常,再进行远程配置。
三、检查并启动 SSH 服务
不同发行版的服务名称通常都是 sshd,但 Debian 和 Ubuntu 的管理命令也常写作 ssh。可以先检查服务状态:
sudo systemctl status ssh 或 sudo systemctl status sshd
若服务未安装,可根据发行版安装 OpenSSH 服务器软件包。安装完成后执行 sudo systemctl enable --now ssh,或将 ssh 替换为 sshd。随后使用 sudo ss -tlnp | grep ssh 查看监听地址和端口。若只监听 127.0.0.1,远程设备将无法连接,需要检查 SSH 配置中的 ListenAddress。
四、决定使用密钥还是密码
| 方式 | 优势 | 不足 | 适用情况 |
|---|---|---|---|
| 密码认证 | 部署简单,不需要管理私钥 | 容易遭遇撞库、暴力尝试和钓鱼 | 临时维护、测试环境或无法部署密钥的设备 |
| SSH 密钥 | 可配合口令保护私钥,适合自动化和多人分权 | 私钥丢失或未备份会影响登录 | 长期运维、云主机、脚本任务和生产环境 |
多数长期运行的 Linux 主机远程登录更适合采用公钥认证。密钥登录不是“完全不需要密码”:私钥文件可以设置口令,登录时由 SSH 客户端解锁。密码认证则更依赖账号密码本身,若保留它,应配合强密码、登录限制和失败尝试控制。
五、生成并部署 SSH 密钥
在客户端生成密钥
在 Linux、macOS 或安装了 OpenSSH 的 Windows 环境中,可执行 ssh-keygen -t ed25519。Ed25519 密钥生成速度快、文件较小,当前常见 OpenSSH 版本都支持;如果旧设备不支持,可按兼容要求选择 RSA。
生成过程中建议为私钥设置口令。公钥通常位于 ~/.ssh/id_ed25519.pub,私钥是没有 .pub 后缀的文件,不能上传到服务器,也不能发送给他人。
把公钥放到目标账号
- 在目标主机创建目录:mkdir -p ~/.ssh。
- 将本地公钥内容追加到目标主机的 ~/.ssh/authorized_keys。
- 修正权限:chmod 700 ~/.ssh,并执行 chmod 600 ~/.ssh/authorized_keys。
- 确认文件所有者属于目标账号,否则 sshd 可能因权限不安全而拒绝认证。
如果系统启用了 SELinux,移动或手动创建文件后还可能需要使用 restorecon 修正安全上下文,具体命令取决于发行版策略。
六、调整 sshd 与防火墙配置
配置文件通常是 /etc/ssh/sshd_config。修改前先备份,并用 sudo sshd -t 检查语法。采用密钥后,可以考虑设置 PasswordAuthentication no,但必须先在另一个终端验证密钥能够登录;否则配置重载后可能失去访问入口。
是否关闭 PermitRootLogin 要结合现有管理方案。多数普通运维场景可禁止 root 直接 SSH 登录,改用普通账号配合 sudo。防火墙方面,只放行实际 SSH 端口和必要来源。例如使用 UFW 时可执行 sudo ufw allow 22/tcp,使用 firewalld 时可通过预定义服务或端口规则放行。规则名称和命令应以当前系统配置为准。
七、验证登录并保留回退方案
- 保持当前控制台或 SSH 会话不要关闭。
- 从另一台设备测试密码或密钥登录,确认账号、端口和权限均正常。
- 检查日志。Ubuntu 常见位置是 /var/log/auth.log,RHEL 系列常见位置是 /var/log/secure,也可使用 journalctl -u sshd 查询。
- 确认成功后,再决定是否关闭密码认证,并记录密钥归属、创建时间和撤销方式。
若出现“Permission denied”,优先检查用户名、authorized_keys 内容、文件权限、私钥口令和 sshd 配置;若出现连接超时,则先检查路由、安全组、防火墙和监听端口。不要反复修改多个因素,否则很难定位根因。

密钥与密码的实际选择建议
个人临时维护一台隔离测试机,密码认证可以降低初始配置成本,但应限制来源并避免使用简单密码。多人共同维护或需要脚本自动部署时,建议每人使用独立密钥,离职、换岗或设备丢失时只撤销对应公钥,不必更换所有人的密码。生产环境通常采用密钥认证,并结合 VPN、跳板机、最小权限账号和多因素认证。
最终,Linux 主机远程登录的安全性不是由“换端口”单独决定的,而是由账号隔离、认证方式、网络边界、日志审计和及时撤销共同决定。完成配置后,应定期删除不用的公钥,更新系统,并复查防火墙规则。
常见问题
1. 密钥登录失败但密码可以登录,怎么办?
检查客户端使用的私钥、服务器上的 authorized_keys 内容、目录和文件权限,以及目标账号是否正确。再查看 sshd 日志,通常能看到更具体的拒绝原因。
2. 修改端口后是否必须关闭 22 端口?
如果新端口已经验证可用,且没有业务需要保留 22 端口,可以关闭旧端口,减少暴露面。修改防火墙前应保留当前管理会话。
3. 私钥丢失后还能登录吗?
如果服务器仍允许密码登录,或还有其他管理员密钥,可以进入账号并删除旧公钥、部署新公钥。若没有任何可用认证方式,通常需要通过云平台控制台、虚拟机控制台或现场管理恢复。
4. 是否应完全禁止密码认证?
在所有管理员都已验证密钥、拥有备用恢复渠道,并确认自动化任务不会依赖密码后,可以关闭。否则应先完善回退方案,再进行调整。

2026-09-22
2026-09-22
2026-09-22
2026-09-22
2026-09-22
2026-09-22