Host别名生效需满足:Host行顶格无特殊字符,必含HostName和User,文件权限为600,且仅读取~/.ssh/config;免密需配密钥与authorized_keys权限正确。
直接改 ~/.ssh/config 就行,不用动系统主机名,也不用改 /etc/hosts。
SSH 客户端只认 ~/.ssh/config 里的 Host 段,不是随便起个名字就能用的。
Host 行后面跟的必须是你要输入的缩写(比如 s1),不能带空格或特殊字符HostName(IP 或域名)和 User,否则连接时会报错 ssh: Could not resolve hostname s1: Name or service not known
600,否则 SSH 会忽略它:chmod 600 ~/.ssh/config
/etc/ssh/ssh_config 里——那是全局配置,普通用户没权限改,且优先级不如用户级配置这不是别名问题,是认证没配好。别名只是简化输入,不等于免密。
ssh-keygen -t ed25519(推荐比 rsa 更快更安全)~/.ssh/authorized_keys,不是 id_rsa.pub 文件本身~/.ssh 权限是否为 700,authorized_keys 是否为 600
IdentityFile ~/.ssh/mykey
用通配符 + Include,避免重复写十几遍一样的 User 和 IdentityFile。
dev 用户和同一把密钥:Host 192.168.1.*n User devn IdentityFile ~/.ssh/id_ed25519_dev
Include ~/.ssh/prod.conf,然后在 prod.conf 里写具体主机段Host web* 能匹配 web1、web-api,但不匹配 staging-web
最常被忽略的是 ControlMaster 复用和套接字目录权限——~/.ssh/sockets 目录不存在或权限不对,会导致复用失效,看起来“别名生效了但连接还是慢”。