linux 通过 ~/.ssh/config 文件为不同服务器绑定专属 ssh 私钥,支持别名、端口、用户等配置;需手动创建该文件、设权限为 600,并为每个 host 指定 identityfile 绝对路径;私钥权限也须为 600 或 400,验证可用 ssh -v 查看密钥加载情况。

Linux 为不同服务器配置不同 SSH 私钥路径,核心是用 ~/.ssh/config 文件做主机级绑定,而不是改全局设置或反复敲 -i。这个方法干净、可复用,且支持别名、端口、用户等一并定义。
创建并编辑 ~/.ssh/config 文件
该文件默认不存在,需手动创建。它只对当前用户生效,权限建议设为 600(chmod 600 ~/.ssh/config),避免 ssh 忽略加载。
用文本编辑器打开:
vim ~/.ssh/config
按需添加类似以下格式的区块(每个 Host 独立):
-
Host 后跟一个你自定义的别名(如
prod-server),也可以直接写域名/IP(如github.com) - HostName 是真实目标地址(IP 或域名)
-
User 指定登录用户名(如
ubuntu、git) -
IdentityFile 填私钥的绝对路径,必须以
~开头或完整路径(不能用./或相对路径)
示例:
Host prod-server<br> HostName 192.168.5.200<br> User admin<br> IdentityFile ~/.ssh/id_rsa_prod
Host github.com<br> User git<br> IdentityFile ~/.ssh/github_key
确保私钥权限正确
SSH 客户端对私钥文件权限很严格:必须是 600(仅属主可读写)或 400(仅属主可读)。否则连接时会报错:Permissions for 'xxx' are too open。
修复命令:
chmod 600 ~/.ssh/id_rsa_prod<br>chmod 600 ~/.ssh/github_key
验证配置是否生效
保存 config 后,直接使用别名连接即可,无需 -i:
ssh prod-serverssh github.com
如果想确认实际用了哪个密钥,加 -v 参数看调试输出:
ssh -v prod-server 2>&1 | grep "Offering public key"
输出中会显示正在尝试的私钥路径,可直观验证是否命中你指定的文件。
进阶提示:多密钥共存与常见陷阱
同一个 Host 下不能写多个 IdentityFile 行 —— SSH 只读取第一个;如需 fallback,得靠服务端配置(不推荐)。更稳妥的做法是:
- 每台服务器配唯一密钥对,公钥分别导入对应服务器的
~/.ssh/authorized_keys - 不要把多个私钥内容拼到一个文件里(比如合并 id_rsa 和 id_rsa_prod),SSH 不支持这种“多密钥合一”方式
- 若某台服务器还用了非标准端口,加一行
Port 2222即可
配置好之后,日常使用就和普通 ssh 一样简洁,不用记路径、不担心权限、也不用每次输参数。











