Skip to content
<

本地电脑(Mac)配置 SCP 免密传输文件

在日常运维中,我们经常需要从 Mac 将文件快速同步到服务器。通过为 scp 配置 SSH 密钥登录,能够实现免密传输,既安全又高效。

📋 前提条件

  • 本地使用 macOS,已安装 sshscp(系统自带)
  • 目标服务器已开启 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.pub

3. 配置本地 ~/.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_configPubkeyAuthentication yes
Permission denied (publickey)确保 IdentityFile 指向正确的私钥;确认公钥内容完整无误
ssh-copy-id 命令不存在使用 Homebrew 安装或手动 scp 上传公钥
首次连接警告设置 StrictHostKeyChecking accept-new 或手动确认指纹

🔐 安全加固建议

  • 为私钥设置 passphrase,并结合 ssh-agent 缓存
  • 定期轮换密钥,撤销不再使用的公钥
  • 不要在公共机器上存放私钥,如需临时使用可采用一次性密钥
  • 为不同环境(测试/生产)使用不同的密钥和主机别名

✅ 小结

通过以上步骤即可在 Mac 上配置 SCP 免密传输,大幅提升文件同步效率。完成后建议编写脚本或使用 rsyncscp + 别名组合,实现更自动化的部署流程。