Skip to content

参考:OpenSSH 命令速查与易错点

基于 OpenSSH · 核于 2026-08

速查

  • ed25519 首选ssh-keygen -t ed25519 -C "comment"。RSA 仅老系统用 -t rsa -b 4096
  • 免密三步:①生成密钥 ②ssh-copy-id 部署公钥 ③确保权限(.ssh 700、authorized_keys 600)。
  • agent 三步:①eval "$(ssh-agent -s)"ssh-add 加载 ③之后免输 passphrase。
  • config 浓缩Host 别名 + HostName/User/Port/IdentityFilessh 别名 即用。
  • 隧道三件-L 本地转发、-R 反向转发、-D 动态代理。
  • 权限命门:过松则 sshd 静默拒绝密钥认证,回退到密码。

一、ssh 常用选项速查

选项作用
-i file指定私钥文件
-p port指定端口(小写 p)
-J hostProxyJump 跳板机
-L lport:host:hport本地端口转发
-R rport:host:hport反向端口转发
-D port动态 SOCKS 代理
-N不执行远程命令(纯转发)
-f后台运行
-A转发 agent(慎用,不可信机器禁开)
-v / -vv / -vvv详细日志(排障用,-vvv 最详细)
-o Option=value临时设置选项(如 -o ServerAliveInterval=60

二、ssh-keygen 常用选项

选项作用
-t type算法(ed25519/rsa/ecsa)
-b bits密钥长度(RSA 用 4096)
-C comment注释(通常写邮箱)
-f file输出文件名
-p修改已有私钥的 passphrase
-y从私钥导出公钥
-l -f file显示公钥指纹
-R host从 known_hosts 删除某 host 的记录

三、ssh-add 常用命令

命令作用
ssh-add file加载私钥(问 passphrase)
ssh-add -l列出已加载密钥指纹
ssh-add -L列出已加载密钥完整公钥
ssh-add -D清空所有密钥
ssh-add -d file删除指定密钥
ssh-add -t secs file加载并设过期时间
ssh-add --apple-use-keychain filemacOS 存入钥匙串

四、~/.ssh/config 指令表

指令作用示例
Host别名(支持 */?Host prod
HostName真实地址HostName 10.0.0.5
User登录用户User deploy
Port端口Port 2222
IdentityFile私钥IdentityFile ~/.ssh/work_key
ProxyJump跳板机ProxyJump bastion
LocalForward本地转发LocalForward 5432 db:5432
RemoteForward反向转发RemoteForward 8080 localhost:80
DynamicForward动态代理DynamicForward 1080
ForwardAgent转发 agent(慎用)ForwardAgent no
ServerAliveInterval保活间隔ServerAliveInterval 60
AddKeysToAgent自动加入 agentAddKeysToAgent yes
UseKeychainmacOS 钥匙串UseKeychain yes
GatewayPorts允许转发绑外部GatewayPorts yes

五、权限要求清单

路径权限说明
~/.ssh/700仅属主读写执行
~/.ssh/id_ed25519600私钥,仅属主读写
~/.ssh/authorized_keys600公钥列表,仅属主读写
~/.ssh/config600配置文件,仅属主读写
~/.ssh/known_hosts644已知主机,可读
  • 修正命令chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys ~/.ssh/config

六、端口转发速查

类型命令监听端口典型场景
本地 -Lssh -L 5432:db:5432 user@bastion本地 5432本地访问内网数据库
反向 -Rssh -R 9090:localhost:8080 user@gw远程 9090内网穿透/暴露本地服务
动态 -Dssh -D 1080 user@gw本地 1080(SOCKS)通用代理

七、易错点清单

  • 「密钥配好了还要输密码」:九成是 ~/.sshauthorized_keys 权限过松,sshd 静默拒绝。用 chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys 修正,排障加 ssh -v 看详细日志。
  • 「RSA 比较新所以首选」:错。ed25519(2014 起 OpenSSH 推荐)更短更快更安全,新项目首选 ed25519;RSA 仅老系统兼容用。
  • 「私钥可以提交到 Git」:错。私钥是机密,提交 Git 即永久泄露(即使后续删除,历史记录仍存),必须加入 .gitignore。
  • 「passphrase 没用,反正麻烦」:错。passphrase 是私钥泄露后的最后一道防线;配合 ssh-agent 只需输一次,不麻烦。
  • 「scp -p 是端口」:错。scp 端口是 -P(大写),-p 是保留时间戳;ssh 的端口才是 -p(小写),两者相反。
  • 「-A(ForwardAgent)随时开」:错。在不可信机器上开 -A,恶意 root 可借用你的 agent 盗用身份。只在可信机器开。
  • 「-L 的目标主机由本地解析」:错。-L 本地端口:目标:目标端口 的目标主机由 **ssh 服务器(远端)**解析,这让本地能访问远端私网地址。
  • 「-R 默认能让远程公网访问」:错。-R 默认只绑远程 127.0.0.1,要让远程公网访问需 sshd 设 GatewayPorts yes 且命令写 0.0.0.0:端口:...
  • 「ProxyJump 和 ProxyCommand 一样旧」:ProxyJump(7.3+)是 ProxyCommand 的简洁替代,优先用 ProxyJump

八、进阶方向(链接其他叶)

  • 网络工具 —— scp/rsync 走的就是 SSH 通道
  • OpenSSL —— SSH 加密底层依赖的密码学与证书体系
  • Nginx —— 配合 -L 隧道访问内网 Web 服务

权威链接