跳转到内容

要使用 SSH 密钥认证(而非密码)来执行 scpssh 命令,你需要先在本地生成 SSH 密钥对,并将公钥上传到服务器。这样可以实现免密登录,提高安全性。以下是具体步骤:


1. 生成 SSH 密钥对(如果还没有)

在本地终端运行:

bash
ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519:使用更安全的 Ed25519 算法(比 RSA 更高效)
  • -C:添加注释(通常用邮箱标识)

按提示输入密钥保存路径(默认 ~/.ssh/id_ed25519)和密码(可选)。


2. 将公钥上传到服务器

方法 1:使用 ssh-copy-id(推荐)

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub $SERVER_USER@$SERVER_IP
  • 系统会提示输入服务器密码,输入后公钥会自动添加到服务器的 ~/.ssh/authorized_keys

方法 2:手动复制(如果 ssh-copy-id 不可用)

  1. 显示公钥内容:
    bash
    cat ~/.ssh/id_ed25519.pub
  2. 登录服务器,将公钥粘贴到 ~/.ssh/authorized_keys
    bash
    mkdir -p ~/.ssh
    echo "你的公钥内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

3. 修改脚本使用密钥认证

直接使用 scpssh 命令时,系统会自动尝试密钥认证。无需修改原命令:

bash
scp /tmp/deploy.tar.gz $SERVER_USER@$SERVER_IP:/tmp/

如果密钥不是默认路径(如 ~/.ssh/id_ed25519),需通过 -i 指定:

bash
scp -i ~/.ssh/custom_key /tmp/deploy.tar.gz $SERVER_USER@$SERVER_IP:/tmp/

4. 验证密钥认证是否生效

运行以下命令,如果无需输入密码即可登录,说明配置成功:

bash
ssh $SERVER_USER@$SERVER_IP

5. 安全建议

  1. 禁用密码登录(可选)
    在服务器上编辑 /etc/ssh/sshd_config

    ini
    PasswordAuthentication no

    重启 SSH 服务:

    bash
    sudo systemctl restart sshd
  2. 备份密钥
    将私钥(如 ~/.ssh/id_ed25519)妥善保存,避免泄露。

  3. 多服务器管理
    如果有多台服务器,可在 ~/.ssh/config 中配置别名:

    ini
    Host myserver
      HostName 14.103.205.204
      User root
      IdentityFile ~/.ssh/id_ed25519

    之后直接使用 scp /tmp/deploy.tar.gz myserver:/tmp/


常见问题

  • 权限错误
    确保本地密钥文件权限为 600
    bash
    chmod 600 ~/.ssh/id_ed25519
  • 服务器拒绝密钥
    检查服务器的 /var/log/auth.log 日志,确认公钥已正确安装。

通过密钥认证,你的脚本将无需硬编码密码,既安全又高效!