SSH 密钥跨平台配置指南:macOS + Windows 双系统实战
从此告别反复输密码,安全高效管理你的云主机
运维开发中,我们每天都要通过 ssh 登录服务器,或是用 scp 传输文件。如果每次都要输入长长的密码,不仅效率低下,还存在密码泄露的风险。
SSH 密钥认证是目前最安全、最便捷的解决方案。本文将手把手带你完成 macOS 和 Windows 双系统下的 SSH 密钥配置,并教你配置 ~/.ssh/config 别名,最终实现 ssh 别名 一键免密登录。
一、核心原理与准备
SSH 密钥由一对文件组成:
- 私钥(Private Key):保存在你的本地电脑上,绝不能泄露。
- 公钥(Public Key):放置在云主机的
~/.ssh/authorized_keys文件中。
工作流程:当你连接服务器时,客户端用私钥“签名”,服务器用公钥验证,匹配则直接放行,无需输入密码。
💡 多设备管理小贴士:你的 Mac 和 Windows 可以各自生成独立的密钥对。只需将所有公钥都追加到服务器的
authorized_keys中,它们就能和平共处,互不影响。
二、macOS 配置篇(主力机)
1. 生成专用密钥对
为避免覆盖默认密钥,我们为“航控”服务器生成专用密钥:
ssh-keygen -t rsa -f ~/.ssh/id_rsa_hangkong -C "hangkong-mac"执行结果(精简):
Your identification has been saved in /Users/你的用户名/.ssh/id_rsa_hangkong
Your public key has been saved in /Users/你的用户名/.ssh/id_rsa_hangkong.pub✅ 生成成功!公钥文件(
.pub)就是需要上传到服务器的内容。
2. 将公钥复制到云主机
使用 ssh-copy-id 命令(macOS 自带):
ssh-copy-id -i ~/.ssh/id_rsa_hangkong.pub -p 2222 root@123.123.123.123- 首次执行,输入一次密码后,提示:
Number of key(s) added: 1- 再次执行(同一把公钥),会智能跳过:
Number of key(s) added: 0✅ 结论:
ssh-copy-id是幂等的,多次执行绝对不会覆盖已有的其他公钥,非常安全。
3. 配置 ~/.ssh/config(实现一键免密)
编辑本地的 ~/.ssh/config 文件(没有则新建),添加以下别名配置:
Host hangkong
HostName 123.123.123.123
User root
Port 2222
IdentityFile ~/.ssh/id_rsa_hangkong
IdentitiesOnly yes配置说明:
Host hangkong:为你服务器起的简短别名。IdentitiesOnly yes:强制只使用指定的密钥,避免其他缓存干扰。
4. 🎉 快捷使用效果展示
配置完成后,所有操作彻底告别冗长参数:
| 操作 | 命令 | 效果 |
|---|---|---|
| SSH 登录 | ssh hangkong | 直接进入服务器终端,无密码提示 |
| 上传文件 | scp ./local.txt hangkong:/root/ | 显示进度条,无密码提示 |
| 下载文件 | scp hangkong:/root/remote.txt ./ | 显示进度条,无密码提示 |
三、Windows 配置篇(备用机/出差机)
这里推荐使用 Windows 10/11 自带的原生 OpenSSH 客户端(无需额外安装 Git Bash)。
1. 生成密钥对(在 PowerShell 中执行)
注意 Windows 下的路径格式:
ssh-keygen -t rsa -f C:\Users\你的用户名\.ssh\id_rsa_hangkong -C "hangkong-win"执行结果同 macOS,显示文件保存路径即成功。
2. 复制公钥到云主机(手工追加)
Windows 没有 ssh-copy-id,我们使用管道命令手动追加(只需输入一次密码):
type C:\Users\你的用户名\.ssh\id_rsa_hangkong.pub | ssh -p 2222 root@123.123.123.123 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"⚠️ 注意:此命令使用
>>追加。若重复执行多次,authorized_keys中会出现重复行。建议只执行一次,或登录服务器执行sort -u ~/.ssh/authorized_keys -o ~/.ssh/authorized_keys去重。
3. 设置私钥权限(最关键的一步!)
Windows 对私钥权限极其严格,必须设置为仅当前用户可读,否则 SSH 会拒绝使用。
icacls C:\Users\你的用户名\.ssh\id_rsa_hangkong /inheritance:r /grant "%USERNAME%:F"成功标志:
已成功处理 1 个文件4. 配置 Windows 下的 config 文件
在 C:\Users\你的用户名\.ssh\ 目录下,新建一个名为 config 且无任何后缀的文件,内容如下:
Host hangkong
HostName 123.123.123.123
User root
Port 2222
IdentityFile C:\Users\你的用户名\.ssh\id_rsa_hangkong
IdentitiesOnly yes配置完成后,在 PowerShell 或 CMD 中,同样可以使用 ssh hangkong 一键登录。
四、服务器端通用配置(与客户端无关)
如果配置完客户端依然提示输入密码,请登录云主机检查以下两项:
1. 检查 SSH 服务配置
执行命令,确保关键项未被禁用:
sudo grep -E "PubkeyAuthentication|PermitRootLogin|AuthorizedKeysFile" /etc/ssh/sshd_config期望输出:
PubkeyAuthentication yes
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys若某行显示 no 或被注释(带 #),请用 sudo vi /etc/ssh/sshd_config 修改,然后重启服务:
sudo systemctl restart ssh2. 修复服务器文件权限(第二大杀手)
权限过宽会导致 SSH 直接忽略公钥认证,请务必执行:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod go-w ~无报错即为修复成功。
五、排障速查表(Debian 13 专用)
如果你的系统是 Debian 12/13,传统日志文件 /var/log/auth.log 默认不存在,因为系统改用 systemd-journald 管理日志。
使用 tail 监控传统日志文件,查看认证日志(SSH 登录等)
sudo tail -f /var/log/auth.log
查看实时认证日志
在云主机上执行:
sudo journalctl -fu ssh然后在本地尝试连接,观察日志输出并对照下表:
| 服务器日志关键词 | 含义 | 解决方案 |
|---|---|---|
Accepted publickey for root | ✅ 认证成功! | 免密已生效,无需操作。 |
Failed publickey for root | ❌ 公钥内容不匹配 | 检查服务器 authorized_keys 是否完整在一行。 |
只有 Accepted password | ❌ 未发起公钥认证 | 检查 sshd_config 确保 PubkeyAuthentication yes。 |
bad ownership or modes | ❌ 权限错误 | 立即执行上面第 4 章的权限修复命令。 |
Timeout before authentication | ⏱️ 网络超时 | 检查云主机防火墙是否放行了该端口。 |
六、关键命令执行结果速查表
| 操作场景 | 核心命令 | 成功标志(终端输出) |
|---|---|---|
| 生成密钥 | ssh-keygen -t rsa -f ~/.ssh/xxx | Your identification has been saved... |
| 复制公钥(Mac) | ssh-copy-id -i xxx.pub user@IP | Number of key(s) added: 1 |
| 复制公钥(Win) | type xxx.pub | ssh ... "cat >>" | 无报错,无密码提示即成功 |
| 设置私钥权限(Mac) | chmod 600 ~/.ssh/xxx | 无输出即为成功 |
| 设置私钥权限(Win) | icacls ... /inheritance:r /grant "%USERNAME%:F" | 已成功处理 1 个文件 |
| 一键登录(别名) | ssh hangkong | 直接进入服务器命令行 |
| 一键上传(别名) | scp ./file hangkong:/root/ | 显示传输进度条 |
| 一键下载(别名) | scp hangkong:/root/file ./ | 显示传输进度条 |
七、总结
配置 SSH 密钥的本质其实就三步:
- 本地生成(公私钥对);
- 公钥上传(追加到服务器
authorized_keys); - 配置别名(编辑
~/.ssh/config指定私钥路径)。
跨平台(Mac/Win)只是路径和权限命令写法不同,核心逻辑完全一致。配置成功后,你将彻底告别繁琐的密码输入,管理多台服务器也能游刃有余。
如果这篇文章帮到了你,欢迎点赞、收藏、转发! 📌
(全文完)