问题:
使用Jenkins,ssh到指定服务器执行脚本时,当SSH连接提示“Permission denied (publickey,password)”时,通常是因为远程服务器未能验证提供的公钥,可能是因为公钥没有被正确添加到远程服务器的~/.ssh/authorized_keys
文件中。
步骤:将公钥添加到远程服务器
1. 获取公钥:
- 在Jenkins中,
user
对应的证书包含私钥(id_rsa
)和公钥(id_rsa.pub
)。 - 需要从Jenkins凭据管理中获取公钥文件内容。
2. 将公钥添加到authorized_keys
:
- 登录到host_name服务器,以下命令来添加公钥:
ssh-copy-id -i /path/to/your/publickey user@host_name
-
如果你手动添加,可以按以下步骤进行:
-
手动步骤:
-
在本地找到你的公钥文件(通常是
id_rsa.pub
,或从Jenkins中复制)。 -
使用SSH登录到
host_name
服务器:
-
ssh user@host_name
-
创建
.ssh
目录并设置正确的权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
-
将公钥添加到
authorized_keys
文件中:
echo "your-public-key-content" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
-
确保
~/.ssh
目录和authorized_keys
文件的权限设置正确,以避免权限错误。 -
另:也可能
authorized_keys 文件已经存在,略过已经步骤,直接把证书追加进去即可。
3. 测试连接:
- 在Jenkins中再次运行Pipeline,检查是否能够成功连接。
其他注意事项:
- 公钥内容:确保将完整的公钥内容复制到
authorized_keys
文件中,避免多余的换行或空格。 - 权限设置:
~/.ssh
目录和authorized_keys
文件的权限设置非常重要。
~/.ssh
目录应为700
权限,authorized_keys
文件应为600
权限。
- 无需密码验证:完成这些步骤后,user
@host_name
应能够基于公钥验证SSH连接,而不需要密码。
----------------------------------- 常规分割线----------------------