SSH别名与免密登录配置
场景:已经能通过 ssh user@ip 密码登录目标机器,如何设置别名 + 免密登录,实现一键直连。
一、配置别名(本地操作)
编辑本地 SSH 配置文件:
# Linux / macOS
nano ~/.ssh/config
# Windows (Git Bash)
notepad C:\Users\Administrator\.ssh\config
如果文件不存在就新建一个。添加如下配置:
Host administrator
HostName xxx.xxx.xxx.xxx
User administrator
Port 22
Host后面的名字就是别名,自定义即可(如server、home-pc等)HostName是目标机器的 IP 或域名User是目标机器的登录用户名Port是 SSH 端口,默认 22,非标准端口需修改
保存后,直接用别名连接:
ssh administrator
二、配置免密登录
第一步:查看本地公钥
cat ~/.ssh/id_ed25519.pub
输出类似:
ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx user@example.com
如果没有公钥,先生成一个:
ssh-keygen -t ed25519
第二步:在目标机器上部署公钥
Linux / macOS 目标机器:
# 确保 .ssh 目录存在
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 追加公钥到 authorized_keys
echo "ssh-ed25519 AAAA...你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Windows 目标机器(PowerShell):
# 确保 .ssh 目录存在
New-Item -ItemType Directory -Force -Path "$HOME\.ssh"
# 追加公钥到 authorized_keys(把引号内的内容替换为你的公钥)
Add-Content -Path "$HOME\.ssh\authorized_keys" -Value 'ssh-ed25519 AAAA...你的公钥内容' -NoNewline
第三步:更新本地 config 添加密钥认证
Host administrator
HostName xxx.xxx.xxx.xxx
User administrator
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
新增了两行:
IdentityFile指定使用的私钥路径IdentitiesOnly yes强制只使用指定的密钥,避免尝试其他密钥导致连接慢
第四步:验证
ssh administrator
无需输入密码,直接登录成功。
三、完整配置示例
# 别名 1
Host server
HostName xxx.xxx.xxx.xxx
User root
IdentityFile ~/.ssh/id_ed25519_server_64_83_18_146
IdentitiesOnly yes
# 别名 2
Host administrator
HostName xxx.xxx.xxx.xxx
User administrator
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# 别名 3(非标准端口)
Host mac
HostName xxx.xxx.xxx.xxx
User tianqinghong
IdentityFile ~/.ssh/id_rsa_new
IdentitiesOnly yes
四、常见问题
1. 目标机器是 Windows,mkdir -p ~/.ssh 报错
Windows 的 PowerShell 不支持 Linux 命令,改用:
New-Item -ItemType Directory -Force -Path "$HOME\.ssh"
2. 配置了公钥但仍然要求输入密码
参考 [[ssh连接服务器踩坑点]],检查目标机器 SSH 服务是否开启了公钥认证:
grep PubkeyAuthentication /etc/ssh/sshd_config
如果是 no,改为 yes 后重启 SSH 服务。
3. 多台机器使用同一个别名
Host 后面的名字是唯一的,后定义的会覆盖前面的。如果需要连接不同机器,使用不同的别名。