ssh
OpenSSH 9.0+OpenSSH 快速参考:连接、密钥管理、用户配置文件、文件传输(scp/rsync/sshfs)、端口转发与跳板机,并附带常用参数和实操示例。
26 条命令
连接
ssh <user>@<host>在远程主机上开启一个交互式 SSH 会话。
-p PORT;-i identity_file;-l user(覆盖 user@ 部分);-E logfile 调试日志;-v / -vv / -vvv 详细级别
ssh -p 2222 [email protected]ssh <user>@<host> '<cmd>'在远程主机上执行一条非交互式命令。
ssh ops@db1 'sudo systemctl status postgresql'ssh -J <jumphost>通过跳板机中转 SSH 连接(ProxyJump)。
-J user1@jump1:2222,user2@jump2;-o ProxyCommand=ssh -W ...
ssh -J [email protected] db1.private -i ~/.ssh/db1_keyssh -N -L <l:r> -f <host>后台本地端口转发,不开启 Shell;-L 本地端口:远端端口。
-N 不执行远端命令;-f 后台;-L 8080:localhost:80;-g 允许远端连到本地侧
ssh -N -L 5432:localhost:5432 -f db1 && psql -h localhostssh -N -R <r:localhost:l>反向隧道——在远端开放端口,转发回本地的端口。
-N;-f;-R 8080:localhost:3000;GatewayPorts yes(服务端配置)
ssh -N -R 8080:localhost:3000 [email protected]ssh -D <lport>在本地侧通过 SSH 服务器建立 SOCKS 代理。
-C 压缩;-q 静默;-D 1080
ssh -D 1080 -q -N tunnel.example.com && curl --proxy socks5h://localhost:1080 https://ifconfig.messh -A <user>@<host>将本地 ssh-agent 转发到远端主机(链式 SSH 时复用本地密钥)。
-A 开启 agent 转发;-a 关闭
ssh -A ops@bastion && ssh internal-db # 使用本地密钥ssh -o <key>=<value>在命令行传入 SSH 选项(适合临时调整,不必写入配置文件)。
StrictHostKeyChecking=no;UserKnownHostsFile=/dev/null(不安全,仅供演示);RequestTTY=force
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]ssh -F <configfile>使用指定的 ssh_config 文件(适合按项目 / 客户隔离配置)。
-F 路径;-G 仅解析配置并打印,不实际连接
ssh -F ~/.ssh/config.work -G devbox | grep -E 'hostname|user'密钥
ssh-keygen -t ed25519 -C '<email>'生成现代且紧凑的 ED25519 密钥对(推荐优于 RSA)。
-t ed25519|rsa|ecdsa;-b 位数;-C 注释;-f 输出路径;-N '口令';-q 静默
ssh-keygen -t ed25519 -C 'you@work' -f ~/.ssh/work_ed25519 -N ''ssh-keygen -lf <pubkey>显示公钥的指纹与位数(用于审计 SSH banner)。
-E md5|sha256|shake256;-l 列出;-i 从 stdin 读取
ssh-keygen -lf ~/.ssh/id_ed25519.pub -E sha256ssh-keygen -R <host>从 known_hosts 中移除某个主机密钥(服务器重建 / 换密钥后)。
-R '[host]:port' 支持非默认端口
ssh-keygen -R '[bastion.example.com]:2222'ssh-copy-id <user>@<host>将本地公钥安装到远端 authorized_keys(需要先有密码登录)。
-i identity.pub;-p PORT;-o 选项
ssh-copy-id -i ~/.ssh/work_ed25519.pub -p 2222 deploy@bastionssh-add [path]将私钥加入当前 ssh-agent(避免每次重输口令)。
-l 列出指纹;-D 全部删除;-d path 删除某把;-t N 生命周期
eval $(ssh-agent) && ssh-add ~/.ssh/work_ed25519 && ssh-add -lssh-keyscan <host>打印远端主机密钥(用于预先植入 known_hosts / 引导)。
-t rsa|ed25519|ecdsa;-p PORT
ssh-keyscan -t ed25519 -p 2222 bastion.example.com >> ~/.ssh/known_hosts配置文件
~/.ssh/config用户级 SSH 配置——声明主机别名、身份、跳板机、心跳等。
Host 别名;HostName 真实地址;User;Port;IdentityFile;PreferredAuthentications;AddKeysToAgent yes;ServerAliveInterval 30;IdentitiesOnly yes;ProxyJump / ProxyCommand;LocalForward / RemoteForward;ControlMaster auto / ControlPath / ControlPersist
Host bastion
HostName bastion.example.com
Port 2222
User ops
IdentityFile ~/.ssh/work_ed25519
Host db*
ProxyJump bastion
User ubuntu文件传输
scp <src> <dest>基于 SSH 在主机之间复制文件(旧但仍广泛使用)。
-r 递归;-P PORT;-i 私钥;-C 压缩;-p 保留权限/时间;-l 限速(Kbit/s)
scp -P 2222 -r dist/ [email protected]:/srv/app/releases/1.4.2/rsync -avz -e ssh <src> <dest>增量同步 / 镜像——重复传输大目录时比 scp 快得多。
-a 归档;-v 详细;-z 压缩;-P 保留部分 + 显示进度;--delete 镜像;--exclude;--dry-run;-e ssh -p 2222
rsync -avz -e 'ssh -p 2222' ./build/ ops@bastion:/srv/app/current/sshfs <user>@<host>:<path> <mount>通过 SSH 挂载远端文件系统(FUSE)——用本地工具编辑远端文件。
-p PORT;-o reconnect;-o transform_symlinks;-C 压缩
sshfs ops@bastion:/srv/app ./remote -o reconnect,transform_symlinkssftp <user>@<host>通过 SSH 子系统进行交互式 / 脚本式文件传输。
sftp -i id -P port;命令:get / put / sync / ls / lls / cd / lcd / chmod
sftp ops@bastion <<'EOF'
mkdir /srv/app/releases/1.4.2
put -r dist/* /srv/app/releases/1.4.2/
EOF排障
ssh -vvv <host>追踪连接过程:KEX、认证、通道建立。判断“为何失败”的最佳手段。
-v / -vv / -vvv;-E file 写入文件
ssh -vvv -E /tmp/ssh.dbg ops@bastion 2>&1 | grep -E 'Authentications|method|Permission denied'ssh-keygen -y -f <private>从私钥派生对应的公钥(手头只有私钥时使用)。
-f 文件;-E 哈希算法
ssh-keygen -y -f ~/.ssh/id_ed25519 > /tmp/derived.pub && diff ~/.ssh/id_ed25519.pub /tmp/derived.pub && echo OKssh -o ConnectTimeout=<N> -o ConnectionAttempts=<K>调整连接超时 / 重试次数,应对网络抖动或冷启动跳板机。
ssh -o ConnectTimeout=5 -o ConnectionAttempts=2 ops@bastionssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3通过 NAT / 防火墙时维持空闲连接不断开。
ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -L 5432:db:5432 -N ops@bastion代理转发
ssh -W %h:%p <proxy>作为 ProxyCommand 实现链式连接——ProxyJump 的旧式替代方案。
ProxyCommand ssh -W %h:%p myjumphost nc -q0 %h %p
ssh -o ProxyCommand='ssh -W %h:%p bastion.example.com' internal-db运维技巧
ssh -O stop / ssh -M -S <sock>ControlMaster——在多个终端间共享一条 SSH 会话以加速。
-M 主控模式;-S socket 路径;-O check|forward|exit
ssh -M -S ~/.ssh/cm-%h bastion; ssh -S ~/.ssh/cm-%h bastion -O check相关命令速查
商标与使用声明
本批命令行工具速查手册为开源社区参考资料。文中涉及的各工具的名称、标识、商标(如 Git™、Docker™、Kubernetes®、kubectl、PostgreSQL®、MySQL®、Redis™、MongoDB®、Linux™、PowerShell™、Vim™ 等)均归对应权利人所有,此处仅为识别与参考之目的使用。
本速查手册的全部内容均为独立编写的简化自包含参考,**与任何官方文档不存在隶属、被认可或引用关系**。命令列表、参数说明、示例均为作者原创简化表达;如需权威信息,请参阅各工具的官方文档。
命令语法与参数可能在不同工具版本中有所差异。所示版本标签对应稳定发布版本;其他版本行为可能有所不同。本速查手册**不代表**商标权利人的任何偏好或推荐。
如商标或版权方认为本站部分内容存在权益侵害,请发送邮件至[email protected],我们在收到有效权属证明后,会在合理期限内修改或移除相关内容。
本网站不对因使用本站信息而产生的任何直接或间接损失承担法律责任。
关于 OpenSSH
OpenSSH 是事实标准的 SSH 实现,最初由 Tatu Ylönen 于 1995 年作为专有软件发布,1999 年由 Theo de Raadt 与 OpenBSD 团队重写为开源。当前便携版是 OpenSSH 9.x,默认装在每个 Linux 发行版、macOS(自 10.1 Panther)、并通过 Windows 的可选 OpenSSH 客户端/服务端功能与 Win32-OpenSSH 移植版提供。OpenSSH 提供加密的远程登录(`ssh`)、安全文件传输(`scp`、`sftp`)、端口转发(本地 `-L`、远程 `-R`、动态 `-D` 当 SOCKS)、跳板(`-J`),以及在内存里保存解密私钥避免重复输入密码的 agent(`ssh-agent`)。认证方式支持口令、公钥(Ed25519 是当下推荐;RSA-3072+ 或 ECDSA-P256 是可接受回退)、FIDO2 硬件令牌(`sk-` 密钥类型)、企业网里的 Kerberos / GSSAPI。被严重低估的功能是用户配置 `~/.ssh/config`——主机信息声明一次,`ssh prod` 处处可用。私钥像口令一样对待:加口令短语,永不拷到共享机,用 `ssh-keygen -t ed25519` 而不是更老的 RSA / DSA。
速查页版本 1.0.0