目标:在你的 MacBook(M1 芯片) 上生成 SSH 密钥,并用它免密码登录远端服务器(如 root@129.28.153.89)
前提条件
- 你的电脑:Apple Silicon M1/M2/M3 Mac(系统 macOS Sonoma/Ventura 等)
- 终端工具:Terminal 或 iTerm2
- 远端服务器:Linux(如 CentOS、Ubuntu、TencentOS),公网 IP 为 129.28.153.89
- 你目前可以通过密码登录服务器(用于上传公钥)
- SSH 端口是 22(或你知道非标准端口)
第一步:在 Mac 上生成 SSH 密钥对(推荐 ed25519)
1. 打开终端
- 打开 应用程序 → 实用工具 → 终端,或使用 iTerm2
2. 运行命令生成密钥
ssh-keygen -t ed25519 -b 521 -C "your_email@example.com"ed25519 是现代、更安全、更快的算法,M1 完美支持 -C "..." 是注释,可写邮箱或描述(如 mac-m1@company.com)
3. 按提示操作
Enter file in which to save the key (/Users/你的用户名/.ssh/id_ed25519):直接按回车,使用默认路径:~/.ssh/id_ed25519
Enter passphrase (empty for no passphrase):建议设置一个密码(passphrase),用于保护私钥(防止 Mac 丢失后被滥用) 输入后回车,再重复一次
成功后你会看到:
Your identification has been saved in /Users/你的用户名/.ssh/id_ed25519
Your public key has been saved in /Users/你的用户名/.ssh/id_ed25519.pub
The key fingerprint is: ...生成的文件说明
文件 | 路径 | 作用 | 能否分享 |
id_ed25519 | ~/.ssh/id_ed25519 | 私钥 —— 只能本地保存,绝不外传 | 绝对不能泄露! |
id_ed25519.pub | ~/.ssh/id_ed25519.pub | 公钥 —— 要上传到服务器 | 可以安全上传 |
.pub 结尾的是公钥,可以复制;没有 .pub 的是私钥,必须保护!
第二步:将公钥上传到远端服务器
方法一:使用 ssh-copy-id(推荐,最简单)
Mac 默认可能没有 ssh-copy-id,先安装:
# 安装(如果提示 command not found)
brew install ssh-copy-id如果没装 Homebrew,先安装: 打开终端运行:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"上传公钥
ssh-copy-id root@129.28.153.89如果 SSH 端口不是 22(比如是 2222),加 -p 参数:
ssh-copy-id -p 2222 root@129.28.153.89系统会提示你输入服务器密码:
root@129.28.153.89's password:输入 服务器 root 用户的密码(不是你 Mac 的密码,也不是私钥的 passphrase)
成功后你会看到:
Number of key(s) added: 1
Now try logging into the machine...方法二:手动复制公钥(适用于无法使用 ssh-copy-id)
1. 查看并复制公钥内容
cat ~/.ssh/id_ed25519.pub你会看到一长串内容,类似:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG4... mac-m1@company.com全选并复制这一整行(从 ssh-ed25519 开始,到邮箱结束)
2. 登录服务器(用密码)
ssh root@129.28.153.89输入密码登录
3. 在服务器上创建 .ssh目录(如不存在)
mkdir -p ~/.ssh4. 将公钥写入 authorized_keys
echo "你复制的公钥内容" >> ~/.ssh/authorized_keys把 "你复制的公钥内容" 替换成你从 Mac 复制的完整字符串
5. 设置权限(非常重要!)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysSSH 安全机制要求严格权限,否则会拒绝密钥登录
第三步:测试密钥登录
退出当前会话:
exit然后重新连接:
ssh root@129.28.153.89你会看到:
- 如果设置了 passphrase:提示你输入一次
- 如果没设:直接登录成功,无需输入服务器密码
恭喜!你已经实现 免密码安全登录!
第四步:(可选)禁用密码登录,提升安全性
请确保你已能用密钥登录,否则可能把自己锁在外面!
1. 登录服务器
ssh root@129.28.153.892. 编辑 SSH 配置
sudo vim /etc/ssh/sshd_config找到并修改:
PasswordAuthentication no
ChallengeResponseAuthentication no确保没有被 # 注释
3. 重启 SSH 服务
systemctl restart sshd现在服务器只接受密钥登录,彻底防止暴力破解。
第五步:(可选)简化登录命令(设置别名)
不想每次都输 ssh root@129.28.153.89?
编辑本地 SSH 配置:
vim ~/.ssh/config添加:
Host myserver
HostName 129.28.153.89
User root
IdentityFile ~/.ssh/id_ed25519
Port 22
AddKeysToAgent yes
UseKeychain yes # macOS 特有:把 passphrase 保存到钥匙串UseKeychain yes:让你的 passphrase 自动保存在 macOS 钥匙串中,只需输入一次
保存后,以后只需输入:
ssh myserver即可登录!
常见问题(Mac M1 专属)
问题 | 解决方法 |
ssh-copy-id: command not found | 运行 brew install ssh-copy-id |
登录时提示 Permission denied (publickey) | 检查服务器 ~/.ssh/authorized_keys 权限为 600 |
每次都要输 passphrase? | 添加 UseKeychain yes 到 ~/.ssh/config,下次输入后会自动记住 |
如何查看已保存的密钥? | ssh-add -L 查看已加载的私钥 |
如何清除已加载的密钥? | ssh-add -D 删除所有 |
总结:Mac M1 用户完整流程
步骤 | 命令 |
1. 生成密钥 | ssh-keygen -t ed25519 -C "your@email.com" |
2. 安装工具 | brew install ssh-copy-id |
3. 上传公钥 | ssh-copy-id root@129.28.153.89 |
4. 测试登录 | ssh root@129.28.153.89 |
5. (可选)设置别名 | 编辑 ~/.ssh/config |
6. (可选)禁用密码登录 | 修改 /etc/ssh/sshd_config → PasswordAuthentication no |
安全提醒(Mac 用户特别注意)
- 私钥文件(id_ed25519)不要备份到 iCloud、iMessage、邮件
- 启用 FileVault 全盘加密,保护私钥
- 如果 Mac 丢失,立即在服务器上删除 ~/.ssh/authorized_keys 中的公钥
- 建议将私钥备份到加密 U 盘(如使用 VeraCrypt)
现在你已经完成所有配置!
只需运行:
ssh root@129.28.153.89或(如果你设置了别名):
ssh myserver即可安全、快速、免密登录远端服务器。