SSH 命令速查表 - SSH 连接与配置常用命令大全
面向要免密登录、从跳板机进入内网、或把远程端口映射到本机调试的开发与运维。SSH 的价值在密钥与 config 的复用:把常用的 Host、跳板、端口转发固化进 ~/.ssh/config,就不必每次敲一长串参数。读完能生成并正确授权密钥对实现免密登录,用 ProxyJump 一层层跨过堡垒机,用 -L 把一个远程服务暴露到本机 localhost 上调试。
典型使用场景
远程登录与文件传输、免密登录(密钥)配置、端口转发(隧道)、排查连接超时、权限过宽被拒(Permission denied (publickey))与主机指纹变更告警。
连接与认证 5
ssh user@hostssh -p 2222 user@hostssh -i ~/.ssh/id_ed25519 user@hostssh -vvv user@hostssh -o ConnectTimeout=5 user@host密钥管理 5
ssh-keygen -t ed25519 -C "tom@example.com"ssh-keygen -t rsa -b 4096 -C "tom@example.com"ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostssh-keygen -lf ~/.ssh/id_ed25519.pubeval $(ssh-agent) && ssh-add ~/.ssh/id_ed25519配置文件 ~/.ssh/config 6
Host prodHostName 1.2.3.4User deployIdentityFile ~/.ssh/id_ed25519ProxyJump bastionLocalForward 8080 127.0.0.1:80端口转发与代理 5
ssh -L 8080:127.0.0.1:80 user@hostssh -R 9090:127.0.0.1:80 user@hostssh -D 1080 user@hostssh -N -L 8080:127.0.0.1:80 user@hostssh -J bastion user@internal参数矩阵
| 参数 | 作用 | 示例 |
|---|---|---|
-i | 指定私钥文件 | ssh -i ~/.ssh/id_ed25519 user@host |
-p | 指定端口(默认 22) | ssh -p 2222 user@host |
-L | 本地端口转发隧道 | ssh -L 8080:127.0.0.1:80 user@host |
-R | 远程端口转发隧道 | ssh -R 9000:localhost:3000 user@host |
-N | 只建隧道不打开 shell | ssh -N -L 5432:localhost:5432 db@host |
-f | 后台运行 | ssh -fN -L 8080:localhost:80 user@host |
scp -r | 递归拷贝目录 | scp -r ./app user@host:/srv/app |
StrictHostKeyChecking | 控制主机指纹校验策略 | ssh -o StrictHostKeyChecking=no user@host |
ProxyJump | 经跳板机连接目标 | ssh -J jump@bastion user@host |
IdentitiesOnly | 只用指定密钥,避免密钥过多被拒 | ssh -o IdentitiesOnly=yes -i key user@host |
易错点与避坑指南
现象密钥登录报 Permission denied (publickey)。
原因私钥权限过宽(如 644)、authorized_keys 权限不对,或服务端 PubkeyAuthentication 关闭。
处置chmod 600 ~/.ssh/id_* 与 700 ~/.ssh;服务端确认 PubkeyAuthentication yes 与 AuthorizedKeysFile 路径。
现象连接长时间无响应后超时。
原因网络不可达、防火墙拦截 22、或 UseDNS 反向解析慢。
处置先 ping/ telnet host 22 验证连通;服务端设 UseDNS no 与 GSSAPIAuthentication no 加速握手。
现象WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
原因目标主机重装/换 IP,指纹与 known_hosts 不符(可能中间人)。
处置确属正常变更后,ssh-keygen -R host 删除旧记录再重连;异常变更须先核实再继续。
现象scp/ssh 因客户端有多个密钥被服务端拒绝。
原因ssh 依次尝试所有密钥,触发服务端 MaxAuthTries 限制。
处置用 -o IdentitiesOnly=yes -i 指定唯一密钥;或在 ~/.ssh/config 按主机绑定 IdentityFile。
现象隧道建立后端口仍连不上。
原因转发目标地址在远端不是 localhost,或 BindAddress 受限。
处置确认 -L 本地:远端host:远端port 的远端地址在服务器本地可达;检查 GatewayPorts 设置。
现象root 直接登录被拒。
原因PermitRootLogin 设为 no(安全最佳实践)。
处置用普通用户登录后 sudo;确需 root 时设 PermitRootLogin prohibit-password 并仅用密钥。
排障路径
1详细输出连接过程
ssh -v user@host看到是认证失败、握手慢还是连接被拒,定位阶段。
2验证端口连通性
nc -zv host 22区分网络层不通与服务未监听。
3清理失效主机指纹后重连
ssh-keygen -R host仅在确认主机变更合法后执行。
4测试免密登录是否生效
ssh -o BatchMode=yes user@host echo okBatchMode 下不会弹出密码提示,可直接验证密钥登录。
提示
- 免密登录用 ssh-copy-id 推公钥,手动拼 authorized_keys 容易踩权限和格式坑。
- ~/.ssh 目录权限要 700,私钥要 600,权限太松 ssh 会拒绝使用。
- 端口转发加 -N -f 可放到后台跑,但记得用 ssh -O exit 或 kill 关掉,避免遗留进程。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。