想要配置SSH主机名别名,最直接的方式就是编辑 ~/.ssh/config 文件,完全不需要修改系统主机名,也无需折腾 /etc/hosts 配置。
不少人在这一步走了弯路,以为要给服务器设置“昵称”就得动系统级别的配置文件,其实大可不必。SSH客户端只认用户目录下的这个配置,其他位置的设置优先级都要往后排。
Host别名生效的必备条件
这里有个容易踩坑的地方:并不是在 ~/.ssh/config 里随便写一行“Host s1”就能直接用。要同时满足几个条件,缺一不可。
首先,Host 行必须顶格书写,后面的缩写不能包含空格或特殊字符。比如你想用 s1 代替 192.168.1.101,那就写 Host s1,简洁明确。
其次,同一段配置里必须同时包含 HostName 和 User。缺少其中任何一个,SSH 连接时会提示“Could not resolve hostname”,这意味着它根本不认识你写的这个缩写。
还有一个容易被忽视的点:文件权限。SSH 对权限检查非常严格,~/.ssh/config 的权限必须设置为 600(仅自己可读写),否则 SSH 会直接忽略这个文件。修改方法很简单:执行 chmod 600 ~/.ssh/config。
另外提醒一下,不要将配置写在 /etc/ssh/ssh_config 里。那是全局配置文件,普通用户无法修改,而且即使改了,优先级也低于用户级的 ~/.ssh/config。
能连上但总要输密码?问题不在别名
别名配置好之后,用 ssh s1 确实能连接,但每次都弹出密码框——这种情况很常见,很多人第一反应是“别名没配好”。实际上别名只负责简化输入,与免密登录是两回事。
要解决密码问题,需要从密钥认证入手:
生成密钥推荐使用 ed25519 算法,它比传统的 rsa 更安全,速度也更快。命令是 ssh-keygen -t ed25519。
公钥必须放到目标机器的 ~/.ssh/authorized_keys 文件中——注意不是直接把 id_rsa.pub 或 id_ed25519.pub 文件扔过去就行,而是要把文件里的内容追加到 authorized_keys 中。
还要检查目标机器上 ~/.ssh 目录的权限是否为 700,authorized_keys 文件是否为 600。权限不对,SSH 照样不会认。
如果你使用了自定义的密钥路径,别忘了在别名段里加上 IdentityFile ~/.ssh/mykey 这一行。
多服务器共用一套参数怎么办
假设你有十几台内网服务器,都使用相同的用户名和同一把密钥,难道要重复写十几遍配置?当然不需要。
可以用通配符来批量匹配。比如所有内网服务器都在 192.168.1.* 网段,可以这样写:
Host 192.168.1.*
User dev
IdentityFile ~/.ssh/id_ed25519_dev
生产环境的服务器可以单独抽成一个文件,比如 ~/.ssh/prod.conf,然后在主配置文件里用 Include ~/.ssh/prod.conf 引入。这样既清晰又方便管理。
需要注意的是,通配符采用“前缀匹配”规则。Host web* 能匹配 web1、web-api,但无法匹配 staging-web。书写时要留意这个细节。
还有一个容易被忽略的性能优化点:ControlMaster 连接复用。简单来说,就是复用已经建立的 SSH 连接,避免每次连接都重新握手。但如果 ~/.ssh/sockets 目录不存在或权限不对,复用机制会失效。看起来别名生效了,但连接速度仍然很慢。检查这个目录,确保它存在且权限正确,能让体验提升不少。
