Skip to content

SSH 密钥跨平台配置指南:macOS + Windows 双系统实战

从此告别反复输密码,安全高效管理你的云主机

运维开发中,我们每天都要通过 ssh 登录服务器,或是用 scp 传输文件。如果每次都要输入长长的密码,不仅效率低下,还存在密码泄露的风险。

SSH 密钥认证是目前最安全、最便捷的解决方案。本文将手把手带你完成 macOSWindows 双系统下的 SSH 密钥配置,并教你配置 ~/.ssh/config 别名,最终实现 ssh 别名 一键免密登录


一、核心原理与准备

SSH 密钥由一对文件组成:

  • 私钥(Private Key):保存在你的本地电脑上,绝不能泄露
  • 公钥(Public Key):放置在云主机的 ~/.ssh/authorized_keys 文件中。

工作流程:当你连接服务器时,客户端用私钥“签名”,服务器用公钥验证,匹配则直接放行,无需输入密码。

💡 多设备管理小贴士:你的 Mac 和 Windows 可以各自生成独立的密钥对。只需将所有公钥都追加到服务器的 authorized_keys 中,它们就能和平共处,互不影响。


二、macOS 配置篇(主力机)

1. 生成专用密钥对

为避免覆盖默认密钥,我们为“航控”服务器生成专用密钥:

bash
ssh-keygen -t rsa -f ~/.ssh/id_rsa_hangkong -C "hangkong-mac"

执行结果(精简)

text
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 自带):

bash
ssh-copy-id -i ~/.ssh/id_rsa_hangkong.pub -p 2222 root@123.123.123.123
  • 首次执行,输入一次密码后,提示:
text
Number of key(s) added: 1
  • 再次执行(同一把公钥),会智能跳过:
text
Number of key(s) added: 0

结论ssh-copy-id 是幂等的,多次执行绝对不会覆盖已有的其他公钥,非常安全。

3. 配置 ~/.ssh/config(实现一键免密)

编辑本地的 ~/.ssh/config 文件(没有则新建),添加以下别名配置:

text
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 下的路径格式:

powershell
ssh-keygen -t rsa -f C:\Users\你的用户名\.ssh\id_rsa_hangkong -C "hangkong-win"

执行结果同 macOS,显示文件保存路径即成功。

2. 复制公钥到云主机(手工追加)

Windows 没有 ssh-copy-id,我们使用管道命令手动追加(只需输入一次密码):

powershell
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 会拒绝使用。

powershell
icacls C:\Users\你的用户名\.ssh\id_rsa_hangkong /inheritance:r /grant "%USERNAME%:F"

成功标志

text
已成功处理 1 个文件

4. 配置 Windows 下的 config 文件

C:\Users\你的用户名\.ssh\ 目录下,新建一个名为 config 且无任何后缀的文件,内容如下:

text
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 服务配置

执行命令,确保关键项未被禁用:

bash
sudo grep -E "PubkeyAuthentication|PermitRootLogin|AuthorizedKeysFile" /etc/ssh/sshd_config

期望输出

text
PubkeyAuthentication yes
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys

若某行显示 no 或被注释(带 #),请用 sudo vi /etc/ssh/sshd_config 修改,然后重启服务:

bash
sudo systemctl restart ssh

2. 修复服务器文件权限(第二大杀手)

权限过宽会导致 SSH 直接忽略公钥认证,请务必执行:

bash
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

查看实时认证日志

在云主机上执行:

bash
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/xxxYour identification has been saved...
复制公钥(Mac)ssh-copy-id -i xxx.pub user@IPNumber 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 密钥的本质其实就三步:

  1. 本地生成(公私钥对);
  2. 公钥上传(追加到服务器 authorized_keys);
  3. 配置别名(编辑 ~/.ssh/config 指定私钥路径)。

跨平台(Mac/Win)只是路径和权限命令写法不同,核心逻辑完全一致。配置成功后,你将彻底告别繁琐的密码输入,管理多台服务器也能游刃有余。

如果这篇文章帮到了你,欢迎点赞、收藏、转发! 📌

(全文完)