要使用 SSH 密钥认证(而非密码)来执行 scp
或 ssh
命令,你需要先在本地生成 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
不可用)
- 显示公钥内容:bash
cat ~/.ssh/id_ed25519.pub
- 登录服务器,将公钥粘贴到
~/.ssh/authorized_keys
:bashmkdir -p ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
3. 修改脚本使用密钥认证
直接使用 scp
或 ssh
命令时,系统会自动尝试密钥认证。无需修改原命令:
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. 安全建议
禁用密码登录(可选)
在服务器上编辑/etc/ssh/sshd_config
:iniPasswordAuthentication no
重启 SSH 服务:
bashsudo systemctl restart sshd
备份密钥
将私钥(如~/.ssh/id_ed25519
)妥善保存,避免泄露。多服务器管理
如果有多台服务器,可在~/.ssh/config
中配置别名:iniHost myserver HostName 14.103.205.204 User root IdentityFile ~/.ssh/id_ed25519
之后直接使用
scp /tmp/deploy.tar.gz myserver:/tmp/
。
常见问题
- 权限错误
确保本地密钥文件权限为600
:bashchmod 600 ~/.ssh/id_ed25519
- 服务器拒绝密钥
检查服务器的/var/log/auth.log
日志,确认公钥已正确安装。
通过密钥认证,你的脚本将无需硬编码密码,既安全又高效!