跳到主要内容

SSH Config 速查 — ~/.ssh/config 50+ 指令完全参考

SSH config 速查,50+ 条 ~/.ssh/config 指令,可复制配置片段和常见坑。

  • 本地处理
  • 分类 开发运维
  • 适合 分享前检查文件类型、大小、元数据和明显不匹配信号。
分类:
51 条指令
基础 (15)
HostHost <pattern> [<pattern2> ...]

开启一个配置块,匹配的主机名才生效。通配符:* 匹配任意序列,? 匹配单个字符。每条指令以第一个匹配的 Host 块为准,后续块只能补充未设置的项。

常见坑: Host*(全局默认)必须放在文件最后。SSH 从上到下逐块处理,每条指令以第一个匹配为准,Host * 放在最前会遮盖所有下方的具体配置块。

# ~/.ssh/config — specific host alias
Host dev
  HostName dev.example.com
  User alice
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

# Connect: ssh dev
# Wildcard: any host in *.staging.company.com
Host *.staging.company.com
  User deployer
  IdentityFile ~/.ssh/staging_ed25519
# Global defaults — must be LAST
Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
  AddKeysToAgent yes
HostNameHostName <hostname|IP>

实际要连接的主机名或 IP 地址。当 Host 别名与实际服务器地址不同时使用这个指令。Host 可以用短别名,HostName 填真实 FQDN 或 IP。

Host prod-api
  HostName 10.0.1.42
  User ubuntu
Host mysite
  HostName mysite.example.com
  User webmaster
UserUser <username>

登录时使用的用户名。不填时 SSH 用本地用户名 ($USER)。云主机上远端用户名往往不同(ubuntu、ec2-user、admin),这时就必须填。

Host aws-prod
  HostName 54.12.34.56
  User ec2-user
  IdentityFile ~/.ssh/aws_prod.pem
PortPort <number>

连接的 TCP 端口,默认 22。服务器跑非标准端口时使用(规避自动扫描器,或防火墙只开放出站 443)。

Host jumpbox
  HostName jump.example.com
  Port 443
  User ops
IdentityFileIdentityFile <path>

使用的私钥文件路径。支持波浪号展开(~/.ssh/…)。同一块里可以写多行 IdentityFile,SSH 按顺序尝试。相对路径从 $HOME 算起。

Host github.com
  IdentityFile ~/.ssh/id_ed25519_github
  IdentitiesOnly yes
Host legacy-server
  IdentityFile ~/.ssh/id_rsa_legacy   # RSA fallback
IdentitiesOnlyIdentitiesOnly yes|no

设为 yes 时,SSH 只向该主机提供 IdentityFile 里列的密钥,忽略 ssh-agent 中加载的其他密钥。有多个密钥时必须设,否则服务器可能因为尝试次数过多而拒绝。

常见坑: 不加 IdentitiesOnly yes 时,SSH 可能把 agent 里的每个密钥都试一遍。GitHub 遇到第一个错误密钥就拒绝("Too many authentication failures")。在 GitHub Host 块里必须配对使用。

Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes
AddKeysToAgentAddKeysToAgent yes|no|confirm|ask

首次使用私钥时自动添加到 ssh-agent,这样整个 session 只需输入一次密码短语。`confirm` 每次使用都弹确认,`ask` 询问是否添加。

Host *
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_ed25519
ServerAliveIntervalServerAliveInterval <seconds>

每隔 N 秒通过加密通道向服务器发送一个保活包。防止空闲 session 通过 NAT、负载均衡器或防火墙时因 TCP 连接超时而断开。

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
ServerAliveCountMaxServerAliveCountMax <number>

服务器连续无响应多少次保活包后 SSH 断开连接。配合 ServerAliveInterval 60 和 CountMax 3,沉默 3 分钟后自动断开。

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
  # Disconnects after 60 × 3 = 180 s of silence
ConnectTimeoutConnectTimeout <seconds>

TCP 建连超时秒数。默认用 OS 的 TCP 超时(Linux ~75 秒,macOS ~127 秒)。批量探测多台主机的脚本里可以调小,快速失败。

Host *
  ConnectTimeout 10
# In a script probing many servers:
# ssh -o ConnectTimeout=5 host
TCPKeepAliveTCPKeepAlive yes|no

OS 层的 TCP 保活,与 ServerAliveInterval 是两回事。有助于检测断开的连接(比如网线拔掉),但穿透 NAT 的可靠性较差。一般两个都配:TCPKeepAlive yes + ServerAliveInterval 60。

Host *
  TCPKeepAlive yes
  ServerAliveInterval 60
CompressionCompression yes|no

对 SSH 数据流启用 gzip 压缩。在慢速或高延迟链路上有帮助(手机、卫星、WAN VPN)。在带宽不是瓶颈的快速局域网上会浪费 CPU。

Host remote-office
  HostName office.example.com
  Compression yes
LogLevelLogLevel QUIET|FATAL|ERROR|INFO|VERBOSE|DEBUG|DEBUG1|DEBUG2|DEBUG3

SSH 客户端诊断消息的详细程度。默认 INFO。DEBUG3 相当于 `ssh -vvv`,打印完整的协议协商过程。脚本里可以用 QUIET 屏蔽横幅消息。

Host debug-host
  LogLevel DEBUG3
  # Equivalent to: ssh -vvv debug-host
Host *
  LogLevel QUIET  # suppress banner in scripts
BatchModeBatchMode yes|no

批量模式下 SSH 不会弹任何密码短语、密码或主机密钥确认提示。适合没有终端的脚本和 cron 任务。鉴权失败立即以非零状态退出。

Host deploy-target
  BatchMode yes
  StrictHostKeyChecking yes
  # Good for CI pipelines
ExitOnForwardFailureExitOnForwardFailure yes|no

任意端口转发建立失败时立即以错误退出。默认即使转发失败 SSH 也会继续连接。在转发是连接目的本身的脚本里,必须开这个。

Host db-tunnel
  HostName bastion.example.com
  LocalForward 5433 db.internal:5432
  ExitOnForwardFailure yes
高级 (14)
ProxyJumpProxyJump <[user@]host[:port]> [,<host2> ...]

通过一个或多个跳板机连到目标主机。SSH 经每个跳板机建立 TCP 隧道,不在跳板机上开 shell。多跳用逗号分隔。需要 OpenSSH 7.3+(2016)。

常见坑: ProxyJump 需要跳板机服务端开启 TCP 转发(AllowTcpForwarding)。管理员禁用了的话,改用 ProxyCommand。

# Single jump host
Host prod-db
  HostName db.private.example.com
  ProxyJump bastion.example.com

# Connect: ssh prod-db
# Multi-hop: jump1 → jump2 → target
Host deep-server
  HostName 10.10.1.5
  ProxyJump jump1.example.com,jump2.example.com

# Override jump host at command line:
# ssh -J other-jump prod-db
ProxyCommandProxyCommand <command>

执行一条命令,其 stdin/stdout 作为 SSH 传输通道。比 ProxyJump 更灵活——可以配合 nc、socat、AWS SSM、Cloudflare Tunnel 或自定义代理。%h 和 %p 分别展开为目标主机和端口。

# Classic nc proxy (OpenBSD nc with -W flag)
Host private-host
  ProxyCommand ssh bastion nc -w 3 %h %p
# AWS SSM Session Manager (no inbound ports)
Host aws-private
  HostName i-0abc123def456789
  ProxyCommand aws ssm start-session --target %h \
    --document-name AWS-StartSSHSession --parameters portNumber=%p
LocalForwardLocalForward <localPort> <remoteHost:remotePort>

将本地端口通过 SSH 连接转发到远端的 host:port。后台跑 `ssh -N host`,就能在本地用 localhost:localPort 访问从 SSH 服务器视角的 remoteHost:remotePort。经典用法:本地访问远端数据库。

常见坑: 默认 LocalForward 只绑定 localhost(127.0.0.1),不绑所有接口。要把隧道共享给局域网其他机器,加 `GatewayPorts yes`——但这会让你整个局域网都能访问这个端口。

# Access remote PostgreSQL locally on port 5433
Host db-tunnel
  HostName bastion.example.com
  LocalForward 5433 postgres.internal:5432

# Start tunnel: ssh -N db-tunnel
# Connect: psql -h localhost -p 5433 mydb
# Multiple forwards in one block
Host dev-tunnel
  HostName dev.example.com
  LocalForward 8080 app.internal:80
  LocalForward 9090 prometheus.internal:9090
RemoteForwardRemoteForward <remotePort> <localHost:localPort>

将远端服务器上的端口转发回本地的 host:port。远端机器就能通过 remotePort 访问 localHost:localPort。用于把本地开发服务器暴露给远端机器,或让远端服务器访问本地服务。

# Expose local dev server (port 3000) on remote port 8080
Host dev-server
  RemoteForward 8080 localhost:3000

# On remote: curl http://localhost:8080 → hits your local :3000
# VS Code Remote: forward local Git credential helper
Host vscode-host
  RemoteForward /run/user/1000/gnupg/S.gpg-agent ~/.gnupg/S.gpg-agent
DynamicForwardDynamicForward <localPort>

在指定本地端口开一个 SOCKS5 代理。支持 SOCKS5 的任意应用(浏览器、curl、git)都能通过 SSH 服务器转发流量。在家访问公司内网的经典做法。

Host office-proxy
  HostName ssh.company.com
  DynamicForward 1080

# Start: ssh -N office-proxy
# Use:   curl --socks5 localhost:1080 http://intranet.company.com
# Browser: set SOCKS5 proxy to localhost:1080
ControlMasterControlMaster yes|no|auto|ask|autoask

启用连接复用。`auto` 在没有主连接时建一个,后续连接复用它。之后 SSH、SCP、rsync 到同一主机共享这条已有连接,不再重新握手或做密钥交换。

Host *
  ControlMaster auto
  ControlPath ~/.ssh/cm/%r@%h:%p
  ControlPersist 10m

# Create socket dir first:
# mkdir -p ~/.ssh/cm && chmod 700 ~/.ssh/cm
ControlPathControlPath <path>

复用控制 socket 文件的路径模板。%r 展开为远端用户名,%h 为主机名,%p 为端口。保持路径短小——Unix socket 路径 macOS 上限 104 字节,Linux 108 字节。

常见坑: ControlPath 路径太长会静默失败,因为 macOS 上 Unix socket 路径限制约 104 字节。用 %C(%l%h%p%r 的哈希)生成紧凑路径:`ControlPath ~/.ssh/cm/%C`。

Host *
  ControlPath ~/.ssh/cm/%r@%h:%p   # readable
  # or compact (avoid long-path bug):
  # ControlPath ~/.ssh/cm/%C
ControlPersistControlPersist yes|no|<time>

最后一个客户端断开后,主 socket 继续保持 <time> 时长。设 10m 意味着 10 分钟内再次 `git push` 会复用已有 socket,完全跳过鉴权。不设的话关终端就关 socket。

Host *
  ControlMaster auto
  ControlPath ~/.ssh/cm/%C
  ControlPersist 10m

# Check open masters: ssh -O check hostname
# Stop master:       ssh -O stop hostname
ForwardAgentForwardAgent yes|no

把本地 ssh-agent 转发到远端主机。可以在远端机器上使用你的本地私钥,不用把密钥复制过去。在远端服务器上用本地 GitHub 密钥 git clone 时必须开启。

常见坑: 绝对不要全局开 ForwardAgent(Host *)。如果远端主机被攻击,攻击者可以用你转发的 agent 以你的身份登录其他服务器。只在特定、受信任的跳板机块里开。

# Only on a trusted bastion you control
Host bastion.example.com
  ForwardAgent yes
IncludeInclude <file|glob>

包含另一个 SSH config 文件。支持 glob 模式。用于按项目、团队或环境拆分配置文件。被包含的文件在当前文件剩余内容之前处理,按 glob 展开顺序。

# ~/.ssh/config
Include ~/.ssh/conf.d/work.conf
Include ~/.ssh/conf.d/personal.conf

# ~/.ssh/conf.d/work.conf
Host *.work.example.com
  User alice
  IdentityFile ~/.ssh/id_ed25519_work
RequestTTYRequestTTY yes|no|force|auto

控制 TTY(伪终端)分配。`force` 即使 stdin 不是终端也强制分配——通过管道运行交互式命令时有用。`auto`(默认)stdin 是终端时才分配。

Host tmux-host
  RequestTTY force
  RemoteCommand tmux new-session -A -s main

# ssh tmux-host → auto-attaches tmux
SendEnvSendEnv <VARIABLE> [<VAR2> ...]

将本地环境变量发送到远端 session。服务端也必须允许接收(服务端配 AcceptEnv)。常用于发送 LANG 和 LC_* 以设置远端 locale,不用登录后再手动 export。

Host *
  SendEnv LANG LC_*   # common default in OpenSSH
MatchMatch <criteria> [!]<value> [...]

条件块——只有条件匹配时才应用其中的指令。条件包括:User、Host、OriginalHost、LocalUser、LocalPort、Exec(执行 shell 命令)、All/Final。需要逻辑条件时比 Host 更强大。

# Apply only when local username is alice
Match User alice
  IdentityFile ~/.ssh/id_ed25519_alice

# Apply when on VPN subnet (Exec runs locally)
Match Exec "ip addr show tun0 2>/dev/null | grep -q 10.8.0"
  ProxyJump none
ForwardX11ForwardX11 yes|no

将远端服务器的 X11 显示转发到本地 X 服务器。让你在服务器上运行 GUI 应用,窗口出现在本地。需要本地有 X 服务器(macOS 用 XQuartz,Windows 用 Xming)。

Host workstation
  ForwardX11 yes
  # or: ForwardX11Trusted yes (for older apps)
安全 (12)
StrictHostKeyCheckingStrictHostKeyChecking yes|no|accept-new|ask

服务器主机密钥不在 known_hosts 时的处理策略。`yes` 拒绝未知密钥(生产环境最安全)。`accept-new` 自动添加新密钥但拒绝变更的密钥(自动化友好)。`no` 接受一切(危险)。`ask` 是交互式默认值。

常见坑: 自动化脚本里写 StrictHostKeyChecking no 会关掉首次信任(TOFU)保护,让你暴露在中间人攻击下。改用 accept-new——自动信任新服务器,但仍拒绝密钥变更(这才是攻击信号)。

# Interactive use: ask (default)
Host *
  StrictHostKeyChecking ask

# CI/CD pipelines: accept new, reject changed keys
Host deploy-targets
  StrictHostKeyChecking accept-new
  UserKnownHostsFile ~/.ssh/known_hosts_ci
UserKnownHostsFileUserKnownHostsFile <path> [<path2> ...]

存储已知主机密钥的文件路径。默认 ~/.ssh/known_hosts。为不同项目或环境使用不同文件,隔离密钥信任域。`/dev/null` 完全禁用已知主机(配合 StrictHostKeyChecking no 使用)。

Host staging-*
  UserKnownHostsFile ~/.ssh/known_hosts_staging
  StrictHostKeyChecking accept-new
PasswordAuthenticationPasswordAuthentication yes|no

启用或禁用密码鉴权。设为 no 可强制只用密钥鉴权,防止 key agent 不可用时意外回退到密码。

Host prod-*
  PasswordAuthentication no  # keys only
# To disable globally:
Host *
  PasswordAuthentication no
PubkeyAuthenticationPubkeyAuthentication yes|no

启用或禁用公钥鉴权。默认 yes。很少需要设为 no——但在 BatchMode 脚本里知道目标主机需要密码/GSSAPI 鉴权时,可以跳过密钥提交阶段。

Host kerberos-host
  PubkeyAuthentication no
  GSSAPIAuthentication yes
PreferredAuthenticationsPreferredAuthentications <method>[,<method2>...]

SSH 尝试鉴权方法的顺序。方法包括:gssapi-with-mic、hostbased、publickey、keyboard-interactive、password。缩小这个列表可以跳过服务端不支持的方法,加快鉴权速度。

# Force public key only (fail fast if no key)
Host prod-*
  PreferredAuthentications publickey
# For a host that only accepts passwords:
Host legacy-host
  PreferredAuthentications password
  PasswordAuthentication yes
CiphersCiphers <cipher>[,<cipher2>...]

按偏好顺序列出对称加密算法。限制为现代算法以满足合规要求(PCI-DSS、FIPS、NIST)。去掉 arcfour/3des-cbc 等弱算法同时也消除了协商开销。先用 `ssh -vvv` 确认服务端支持哪些算法。

Host secure-host
  Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,chacha20-poly1305@openssh.com
MACsMACs <mac>[,<mac2>...]

消息认证码算法偏好顺序。ETM(先加密后 MAC)变体比先 MAC 后加密更安全。合规环境下限制为 hmac-sha2-* 或 AES-GCM、ChaCha20-Poly1305 内置的隐式 ETM 变体。

Host compliance-host
  MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithmsKexAlgorithms <alg>[,<alg2>...]

密钥交换算法偏好列表。现代选择:curve25519-sha256、ecdh-sha2-nistp256。旧服务器可能需要 diffie-hellman-group14-sha256。去掉弱 DH 组(group1/group14-sha1)防止降级攻击。

Host hardened-host
  KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521
HostKeyAlgorithmsHostKeyAlgorithms <alg>[,<alg2>...]

接受的主机密钥类型偏好顺序。ed25519 是现代选择——快、小、免疫时序侧信道攻击。新服务器只保留 ed25519 和 ecdsa-sha2-nistp256;旧服务器保留 rsa-sha2-512 向后兼容。

Host modern-servers
  HostKeyAlgorithms ssh-ed25519,ecdsa-sha2-nistp256,rsa-sha2-512
CheckHostIPCheckHostIP yes|no

设为 yes 时,除主机名外还把服务器 IP 地址存入 known_hosts。IP 变化时(如 DNS 劫持)SSH 会报警。在没有 DNSSEC 的域名上有助于发现 IP 欺骗攻击。

Host *
  CheckHostIP yes
HashKnownHostsHashKnownHosts yes|no

在 known_hosts 里对主机名哈希处理,避免文件泄露基础设施信息。known_hosts 被盗后会暴露你连接过哪些服务器——哈希可以防止这一点。已有的未哈希条目可用 `ssh-keygen -H` 哈希处理。

Host *
  HashKnownHosts yes

# Hash existing entries:
# ssh-keygen -H && rm ~/.ssh/known_hosts.old
UpdateHostKeysUpdateHostKeys yes|no|ask

服务端通过 SSH 协议广播新的或轮换的主机密钥时,自动更新 known_hosts。管理员轮换服务器密钥后保持 known_hosts 更新,减少"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"误报。

Host *
  UpdateHostKeys yes
技巧与模式 (10)
Pattern: Host * global defaultsHost * (must be last)

把 Host * 放在配置文件最末,为所有连接设置默认值。因为第一个匹配块获胜,上面的具体块优先级更高。一个精心配置的 Host * 块可以取代每次手动打公共参数。

# ~/.ssh/config — Host * MUST be last
Host dev
  HostName dev.example.com
  User alice
  Port 2222

Host *.prod
  User ubuntu
  IdentityFile ~/.ssh/prod_key

# Global fallbacks — last in file
Host *
  AddKeysToAgent yes
  ServerAliveInterval 60
  ServerAliveCountMax 3
  ControlMaster auto
  ControlPath ~/.ssh/cm/%C
  ControlPersist 10m
Pattern: GitHub dual accountHost github-work / Host github-personal

建两个 Host 别名都指向 github.com,各配不同的 IdentityFile 和 IdentitiesOnly yes。把每个仓库的远端 URL 改成对应别名。这是唯一正确的多账号做法——GitHub 按公钥识别你,不是用户名。

# ~/.ssh/config
Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  IdentitiesOnly yes
# Set remote URL to use alias:
# git remote set-url origin git@github-work:company/repo.git
# git remote set-url origin git@github-personal:alice/blog.git
Pattern: ProxyJump bastion chainProxyJump jump1.example.com,jump2.example.com

ProxyJump 里用逗号分隔跳板机,实现多跳链式连接。SSH 按顺序连接每个节点,不在中间节点开 shell。只需要本地私钥——不用把密钥放在中间节点上(不开 ForwardAgent 时)。

# ~/.ssh/config
Host bastion-1
  HostName bastion1.example.com
  User ops

Host bastion-2
  HostName bastion2.internal.example.com
  User ops
  ProxyJump bastion-1

Host deep-internal
  HostName 10.10.10.5
  User ubuntu
  ProxyJump bastion-1,bastion-2

# Or inline at command line:
# ssh -J bastion1,bastion2 10.10.10.5
Pattern: VS Code Remote SSHControlMaster + RemoteForward for VS Code

VS Code Remote SSH 读取 ~/.ssh/config 并应用所有指令。加 ControlMaster/ControlPersist 加快 VS Code 重复连接速度。用 RemoteForward 把本地服务器暴露给远端工作区。用 SetEnv 设置 VS Code 专用环境变量。

Host vscode-devbox
  HostName devbox.example.com
  User alice
  IdentityFile ~/.ssh/id_ed25519
  ControlMaster auto
  ControlPath ~/.ssh/cm/%C
  ControlPersist 1h
  # Forward local dev server to remote port 3001
  RemoteForward 3001 localhost:3000
  # Increase alive timeouts for long VS Code sessions
  ServerAliveInterval 120
  ServerAliveCountMax 10
Pattern: SOCKS5 office proxyDynamicForward 1080 via SSH server

用 DynamicForward 连接到公司内部或 VPN 内的 SSH 服务器,建立一个本地 SOCKS5 代理。把浏览器或系统代理设为 localhost:1080 的 SOCKS5,就能浏览内网站点。

Host office-socks
  HostName ssh.company.com
  DynamicForward 1080
  Compression yes

# Start: ssh -N office-socks
# macOS: networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 1080
# curl: curl --socks5 localhost:1080 http://internal.company.com
Pattern: Ephemeral cloud VMsStrictHostKeyChecking accept-new + UserKnownHostsFile /dev/null

云主机每次重建都会得到新的主机密钥。对于 CI、开发环境这类临时实例,你知道 IP 可信但密钥会变——用 UserKnownHostsFile /dev/null 避免"密钥已变更"警告,同时不用危险的 StrictHostKeyChecking no。

# For ephemeral CI build agents
Host ci-runner-*
  StrictHostKeyChecking accept-new
  UserKnownHostsFile ~/.ssh/known_hosts_ci
  BatchMode yes
Tip: Verify effective config with ssh -Gssh -G <hostname>

打印某个主机实际会用到的 SSH 配置,不发起连接。显示匹配了哪个 Host 块,以及每条指令的解析值——调试配置问题最快的方法。OpenSSH 6.7(2014)起可用。

# Show effective config for 'dev':
ssh -G dev

# Grep for specific directives:
ssh -G dev | grep -E 'hostname|user|identityfile|proxyjump'

# Useful outputs:
# hostname dev.example.com
# user alice
# port 2222
# identityfile ~/.ssh/id_ed25519
Tip: Debug with ssh -v / -vvvssh -v | -vv | -vvv <host>

加 -v 显示调试输出,-vv 更详细,-vvv 显示完整协议跟踪。输出显示读了哪些配置文件、提交了哪些 identity 及是否被拒绝、连接在哪里失败。大多数 SSH 问题在 -v 输出的前 20 行就能诊断出来。

ssh -v hostname              # basic debug
ssh -vvv hostname            # full protocol trace
ssh -v -G hostname           # show config + debug
Tip: File permissionschmod 700 ~/.ssh && chmod 600 config key

SSH 静默忽略 group 或 world 可读的配置文件和私钥。~/.ssh 目录必须 700,config 和私钥必须 600 或 400,公钥可以是 644。权限错误是"配置没生效"的第一大原因。

# Fix all permissions at once:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_*       # private keys
chmod 644 ~/.ssh/*.pub      # public keys
chmod 600 ~/.ssh/known_hosts

# Check:
ls -la ~/.ssh/
Tip: Generate and manage keysssh-keygen -t ed25519 -C "comment" -f ~/.ssh/name

生成新的 Ed25519 密钥(优于 RSA)。-C 添加注释(通常是邮箱或机器名),在 authorized_keys 里可见。-f 指定文件名。为不同服务器组或角色使用不同密钥文件,密钥泄漏时限制爆炸半径。

# Generate Ed25519 key:
ssh-keygen -t ed25519 -C "alice@laptop" -f ~/.ssh/id_ed25519_work

# Copy public key to server:
ssh-copy-id -i ~/.ssh/id_ed25519_work.pub user@host

# List keys in agent:
ssh-add -l

# Add key to agent:
ssh-add ~/.ssh/id_ed25519_work

这个工具能做什么

可搜索的 SSH config 速查,涵盖 ~/.ssh/config 里真正常用的 50+ 条 指令。基础:Host 模式匹配、HostName、User、Port、IdentityFile、 IdentitiesOnly、AddKeysToAgent、ServerAliveInterval、 ServerAliveCountMax、ConnectTimeout、BatchMode、TCPKeepAlive、 LogLevel、Compression、ExitOnForwardFailure。高级:ProxyJump 跳转堡垒机和多跳链、ProxyCommand 自定义隧道、LocalForward 和 RemoteForward 端口转发、DynamicForward SOCKS5 代理、ControlMaster / ControlPath / ControlPersist 连接复用(让重复 SSH、rsync、scp 飞速)、 ForwardAgent、ForwardX11、SendEnv、SetEnv、RequestTTY、Include 拆分配置文件到各项目、Match 条件块。安全:如何加固主机密钥 (StrictHostKeyChecking、UserKnownHostsFile、CheckHostIP、 HashKnownHosts)、关掉密码登录(PasswordAuthentication)、 合规环境下收紧 Ciphers 和 MACs、用 IdentitiesOnly 管理多密钥、 新主机用 accept-new。使用技巧与模式:Host * 全局默认、子域名 通配符、多别名、GitHub / GitLab 双账号配置、ProxyJump 链跳堡垒机、 DynamicForward SOCKS5 内网穿透、VS Code Remote SSH 要点、ssh -vvv 调试。每条都给可直接粘贴到 ~/.ssh/config 的片段、中英双语说明、 存在时的常见坑。搜索框跨指令名/说明/例子/常见坑同时过滤, 分类胶囊切 基础/高级/安全/技巧。一键复制。完全浏览器里跑, 不上传不追踪。

工具细节

输入
文本
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 预览
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 28 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
开发运维 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

SSH Config 速查 适合怎么用

适合在上传、交付、归档、客服排查前使用,也适合任何文件离开本机前的本地复核。

适合文件任务

  • 分享前检查文件类型、大小、元数据和明显不匹配信号。
  • 上传、归档、接收或审核前整理混合文件夹。
  • 敏感文件先留在浏览器里处理,不用交给账号型服务。

文件检查项

  • 不要只凭扩展名判断真实文件类型。
  • 文件发给客户、供应商或公开页面前,先看元数据。
  • 复制、转换或导出结果确认前,保留原文件。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 Nginx 速查表 Nginx 速查表,常见配置、location/server 块、SSL、反代、gzip,真实例子和常见坑。 打开
  2. 2 Bash 速查表 Bash 速查表,100+ 命令和习语,涵盖变量、条件、循环、函数、管道、信号陷阱,真实一行命令。 打开
  3. 3 curl 命令速查 curl 命令速查,80+ 条覆盖 GET/POST/认证/上传/下载/SSL/代理,真实例子和常见坑。 打开

真实使用场景

  • 连十台线上服务器不用记任何 IP

    团队有十台 EC2,IP 难记,端口还各不一样。你在 ~/.ssh/config 里加 十个 Host 块,起别名 `ssh prod-api`、`ssh prod-db`、`ssh staging-web`。 在 Host * 块里配 ControlMaster 和 ControlPersist=10m,一批连接 里的第二条复用 socket,跳过握手,原来批量连 10 台要 45 秒的 ansible 部署缩到 8 秒。

  • 在笔记本上通过堡垒机访问内网数据库

    PostgreSQL 在私有子网里,只有堡垒机能到达。你在堡垒机 Host 块里加 一条 LocalForward:`LocalForward 5433 db.internal:5432`。后台跑 `ssh -N bastion`,本地就能 `psql -h localhost -p 5433 mydb`。 速查里的 LocalForward 条目给了精确语法和 ExitOnForwardFailure 的坑。

  • 让 VS Code Remote SSH 通过公司跳板机正常工作

    VS Code Remote SSH 底层直接调 ssh,会读 ~/.ssh/config。你在目标 主机块里加 ProxyJump 和 ControlMaster,VS Code 的"打开远程 SSH" 会自动识别。速查里的 VS Code 技巧条目给了完整配置,RemoteForward 那条还说明了如何把本地开发服务器暴露给远端 IDE 访问。

常见踩坑

  • 忘记 chmod 600。config 文件对 group 或所有人可读时 SSH 静默忽略整个文件。编辑后要跑 `chmod 600 ~/.ssh/config`。

  • 把具体 Host 块放在 Host * 后面。SSH 对每条指令以第一个匹配块为准,所以通配符默认块必须放最后,否则会覆盖具体配置。

  • 全局开 ForwardAgent yes。把 agent 转发给不受信任的主机,那台机器上的任何人都能用你的密钥。应该只在特定信任的跳板机块里开。

隐私说明

每条指令、搜索框、分类胶囊、复制按钮全在浏览器里对着内存数组运行。 你输的词、选的过滤、拷的片段都不发到服务器。打开 DevTools → Network 边操作边看,零出站请求。公司代理后面、飞机上、有浏览器的离网跳板机上 都能用,而这些场景恰恰最需要 SSH config 参考。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-07-01