ssh远程连接核心是安全稳定可验证,需确保服务运行、端口监听、防火墙放行;推荐密钥登录并禁用密码认证,辅以非root账户、端口修改及config简化连接。

linux 通过 SSH 远程连接服务器,核心是安全、稳定、可验证。只要密钥或密码正确,服务端 SSH 正常运行,网络可达,就能连上。重点不在“怎么输命令”,而在于“怎么连得稳、防得住、管得好”。
确认服务端 SSH 已启用并监听
远程连不上,八成是服务没起来或被防火墙拦了。登录服务器本地(或控制台),执行:
- 检查 SSH 服务状态:
sudo systemctl status sshd(centos/RHEL 用sshd,ubuntu/debian 通常也是sshd;若显示 inactive,运行sudo systemctl start sshd并enable开机自启) - 确认监听端口:
sudo ss -tlnp | grep :22(默认端口是 22;如改过端口,比如 2222,就查:2222) - 检查防火墙放行:Ubuntu 用
sudo ufw status,确认 22(或自定义端口)为 ALLOW;CentOS 7+ 用sudo firewall-cmd --list-ports,缺则加:sudo firewall-cmd --add-port=22/tcp --permanent && sudo firewall-cmd --reload
客户端连接:密码登录快速验证
首次连接建议先用密码方式确认通路是否畅通:
- 在本地终端输入:
ssh username@server_ip(例如ssh john@192.168.1.100) - 首次连接会提示 “The authenticity of host … can’t be established”,输入 yes 继续(这是记录服务器公钥指纹,防中间人攻击)
- 输入对应用户的密码(不是 root 密码,除非你用的是 root 账户),成功即进入 shell
- 注意:若提示 Connection refused,说明 SSH 服务未运行或端口不对;若提示 Connection timed out,大概率是网络不通或防火墙拦截
升级为密钥登录:更安全、免密码
密码登录易被暴力破解,密钥对(public/private key)才是生产环境标准做法:
- 生成密钥对(在本地电脑执行):
ssh-keygen -t ed25519 -C "your_email@example.com"(一路回车,默认保存在~/.ssh/id_ed25519) - 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip(自动追加到~/.ssh/authorized_keys) - 禁用密码登录(可选但推荐):登录服务器后,编辑
/etc/ssh/sshd_config,确保以下两行:
PubkeyAuthentication yesPasswordAuthentication no
改完必须执行:sudo systemctl restart sshd
之后再 ssh 就自动走密钥,无需输密码——前提是私钥权限严格(chmod 600 ~/.ssh/id_ed25519)。
进阶安全建议:不连错、不裸奔
连得上只是开始,长期运维还要防误操作和外部风险:
- 别直接用 root 登录:sshd_config 中设
PermitRootLogin no,用普通用户 +sudo管理 - 改默认端口(可选):把 Port 22 改成其他高位端口(如 2244),能大幅减少自动化扫描攻击(改后记得同步更新防火墙规则)
- 用 config 文件简化连接:在本地
~/.ssh/config添加:
Host myserver<br> HostName 192.168.1.100<br> User john<br> Port 22<br> IdentityFile ~/.ssh/id_ed25519
以后只需输入 ssh myserver 即可直连。
基本上就这些。SSH 本身不复杂,但配置细节容易忽略——尤其权限、防火墙、服务状态这三关,卡住时优先排查它们。