ssh不读~/.ssh/config的主因是权限过宽:~/.ssh目录权限须≤700、config文件须≤600,否则OpenSSH静默忽略;还需注意Host与HostName分离、IdentityFile用绝对路径、ProxyJump需跳板机开启AllowTcpForwarding及配置编码为Unix格式。

直接配 ~/.ssh/config 就能省掉每次敲一长串 ssh -p 2222 user@192.168.1.101,还能让 scp、rsync、git 自动走对应配置。但配错会导致连接失败、权限被拒、甚至被 ssh 拒绝加载 config 文件。
为什么 ssh 不读 ~/.ssh/config
常见原因是权限太宽松:~/.ssh 目录不能高于 700,~/.ssh/config 文件不能高于 600。只要其中任一文件或目录权限过大(比如 chmod 755 ~/.ssh),OpenSSH 就会静默忽略整个 config 文件。
- 检查权限:
ls -ld ~/.ssh ~/.ssh/config - 修复命令:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/config - 注意:如果用 root 配置但实际以普通用户运行 ssh,要改的是普通用户的
~/.ssh,不是/root/.ssh
Host 别名和 HostName 的区别
Host 是你在终端里输入的简称(如 ssh db01),HostName 才是真实解析的目标地址(IP 或域名)。两者必须分开写,混在一起会失效。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 正确写法:
Host db01 HostName 192.168.1.102 User appuser Port 2222 - 错误写法:
Host db01 192.168.1.102(这会让 ssh 认为你要匹配两个模式,基本没用) - 支持通配:
Host 192.168.1.*可批量匹配,但优先级低于精确匹配
多主机共享同一私钥时的 IdentityFile 写法
默认 ssh 会尝试 ~/.ssh/id_rsa,但如果用了非标准路径(比如集群统一密钥放在 /etc/ssh/cluster-key),必须显式指定 IdentityFile,且路径必须绝对——相对路径(如 ./key)会被解释成相对于当前工作目录,不是 ~/.ssh/。
- 正确写法:
IdentityFile /etc/ssh/cluster-key - 错误写法:
IdentityFile ./cluster-key或IdentityFile cluster-key - 若私钥有密码,ssh 会弹出提示;想免交互,得配合
ssh-agent添加一次:ssh-add /etc/ssh/cluster-key
ProxyJump 跳转时的 config 嵌套写法
从本地 → jumpserver → target 这种两跳场景,ProxyJump 比老式 ProxyCommand 更简洁,但必须确保每一跳的 Host 条目都独立存在且可连通。
- 先定义跳板:
Host jump HostName 192.168.10.10 User admin IdentityFile ~/.ssh/jump-key - 再定义目标(引用跳板):
Host app-prod HostName 10.0.2.5 User deploy ProxyJump jump - 验证是否生效:
ssh -F ~/.ssh/config -v app-prod看日志里有没有debug1: Setting implicit ProxyJump - 注意:跳板机的
sshd_config必须开启AllowTcpForwarding yes,否则 ProxyJump 失败
最容易被忽略的是 config 文件的编码和换行符——Windows 编辑器保存的 CRLF 会导致解析失败,务必用 dos2unix ~/.ssh/config 或在 vim 中执行 :set ff=unix。另外,任何语法错误(比如漏写换行、多加空格)都会让整段 Host 配置失效,不报错也不提示。

















