本地电脑(Mac)配置 SCP 免密传输文件
在日常运维中,我们经常需要从 Mac 将文件快速同步到服务器。通过为 scp 配置 SSH 密钥登录,能够实现免密传输,既安全又高效。
📋 前提条件
- 本地使用 macOS,已安装
ssh与scp(系统自带) - 目标服务器已开启 SSH 登录,并允许密钥认证
- 拥有目标服务器的登录账号(如
root或普通用户)
⚙️ 配置步骤
1. 生成 SSH 密钥对
bash
# 若尚未生成密钥,可使用以下命令
ssh-keygen -t ed25519 -C "mac-scp" -f ~/.ssh/id_ed25519
# 如需要 RSA(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "mac-scp" -f ~/.ssh/id_rsa-t指定密钥算法-C为备注,便于区分-f指定保存路径- 生成过程中可设置密钥短语(建议设置以提升安全性)
2. 将公钥上传到服务器
推荐使用 ssh-copy-id(如未安装,可通过 Homebrew 安装 brew install ssh-copy-id):
bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip若服务器不支持 ssh-copy-id,可手动上传:
bash
scp ~/.ssh/id_ed25519.pub user@server_ip:/tmp/mac.pub
ssh user@server_ip
mkdir -p ~/.ssh && cat /tmp/mac.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm /tmp/mac.pub3. 配置本地 ~/.ssh/config
便于管理多个服务器,建议添加主机别名:
bash
cat >> ~/.ssh/config <<'EOF'
Host prod-server
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
Port 22
StrictHostKeyChecking accept-new
EOF若
config已存在,请在文件尾部添加上述片段即可。
4. 测试免密登录与传输
bash
# 测试 SSH 免密登录
ssh prod-server
# 使用 scp 传输文件/目录
scp ./dist.zip prod-server:/opt/releases/
scp -r ./config prod-server:/opt/releases/config若上述命令无需密码即可完成,即表示免密配置成功。
🔍 常见问题排查
| 问题 | 解决思路 |
|---|---|
| 登录仍提示密码 | 检查服务器 ~/.ssh/authorized_keys 权限是否为 600;确认服务器 sshd_config 中 PubkeyAuthentication yes |
Permission denied (publickey) | 确保 IdentityFile 指向正确的私钥;确认公钥内容完整无误 |
ssh-copy-id 命令不存在 | 使用 Homebrew 安装或手动 scp 上传公钥 |
| 首次连接警告 | 设置 StrictHostKeyChecking accept-new 或手动确认指纹 |
🔐 安全加固建议
- 为私钥设置 passphrase,并结合
ssh-agent缓存 - 定期轮换密钥,撤销不再使用的公钥
- 不要在公共机器上存放私钥,如需临时使用可采用一次性密钥
- 为不同环境(测试/生产)使用不同的密钥和主机别名
✅ 小结
通过以上步骤即可在 Mac 上配置 SCP 免密传输,大幅提升文件同步效率。完成后建议编写脚本或使用 rsync、scp + 别名组合,实现更自动化的部署流程。