SSH 相关
文章内容
如何使用 SSH 相关指令?
如需了解更多 Jenkinsfile 中关于 SSH 命令的内容,您可以查看 在持续集成中使用 SSH。
持续集成使用 SSH 时提示 Auth fail
原因:Auth fail 是指私钥认证失败,可以检查一下本地的私钥是否能够正常连接到目标服务器。
解决方法:
- 密钥无问题且系统是 Ubuntu 22.04 时,可以执行以下命令在配置文件 sshd_config 中设置配置参数 PubkeyAcceptedKeyTypes。
vim /etc/ssh/sshd_config
PubkeyAcceptedKeyTypes=+ssh-rsa
- 执行以下命令,重启 sshd 和 ssh 服务。
systemctl restart sshd
或
systemctl restart ssh
- 如果仍然无法解决,只能使用用户名和密码进行 ssh 连接。 该问题是由于比较新的操作系统禁用了 ssh-rsa 加密算法,而 Jenkins ssh 插件比较旧,双方无法兼容问题,导致 Auth fail。
持续集成 ssh 远程执行推送命令提示 Connection timed out
原因: 这是由于网络不通导致的,可以确认需要远程的机器是否是公网 IP,且 ssh 端口是否对 CODING 公共节点 IP 开放白名单。
解决方案:
- 如果您的构建计划使用的是 CODING 提供的公共节点,您需要放通您的服务器对于 CODING 提供的公共节点的出口网段。公共节点出口 IP
- 如果您的构建计划使用的是 自定义节点,您需要确保您接入 CODING 的自定义节点和目标被登录节点的网络连通性(可以联系您这边的网络管理员或机器管理员进行调整)。
SSH 使用 nohup 部署服务
pipeline {
agent any
stages {
stage("编译构建"){
steps {
sh "CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go"
}
}
stage("阶段名称") {
steps {
script {
remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "1.1.1.1"
remoteConfig.allowAnyHosts = true
remoteConfig.user = "root"
remoteConfig.port = 22
// SSH 登录密码
remoteConfig.password = "xxxxx"
sshPut(remote: remoteConfig, from: 'main', into: '/root')
sshCommand(remote: remoteConfig, command: 'ls main')
sshCommand(remote: remoteConfig, command: 'chmod +x /root/main && nohup /root/main > nohup.log 2>&1 &')
}
}
}
}
}
如果直接使用 nohup /root/main &
, 构建任务是不会退出的。需要改成 nohup /root/main > nohup.log 2>&1 &
。
此处可以尝试方案二, 使用 systemd 来管理您的服务。这样在 sshCommand 中的 shell 可以改成 systemctl restart xxxx
。
SSH 时提示 invalid privatekey
原因:invalid privatekey 是录入的私钥格式不支持,可以前往凭据管理修改使用 RSA 密钥。要求如下图所示。
解决方案:执行命令ssh-keygen -m PEM -t rsa -b 4096
。
SSH 本地是好的但是很慢,CI 中无法成功
原因:目标机器可能高负载。
执行 SSH 命令访问阿里云主机时提示 Connection reset 错误
此问题是阿里云侧白名单未放行 CODING IP 所致。前往阿里云「安全管控平台」->「安全管控」->「新增访问白名单」,将 CODING 构建机所使用的 出口 IP 地址 加入至白名单中可以防止其在访问云主机时被拦截。
问题反馈 >
2024-09-12最近更新
感谢反馈有用
感谢反馈没用
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。