You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Jenkins Slave SSH连接Linux报错:无法解析主机名118求助

解决Windows Jenkins从节点SSH连接Linux时的主机名解析错误

嘿,我来帮你搞定这个问题!你遇到的错误ssh: Could not resolve hostname 118: No such host is known,根源在于密码里的@符号被shell误解析了。

你原来的命令是:

ssh -p 22 -pw Qwerty@118 pxx1g9x@1x.1xx.13x.3x

这里的-pw参数后面的Qwerty@118会被shell拆分:它把@当成了用户名和主机名的分隔符,误以为你要连接的主机是118,而不是后面的1x.1xx.13x.3x,这就导致了主机名解析错误。

下面给你几个可行的解决方案,按安全性和易用性排序:

1. 最安全的方案:使用SSH密钥认证(强烈推荐)

明文写密码在Jenkinsfile里是非常危险的,容易泄露敏感信息。用密钥认证不仅能解决这个问题,还更安全:

  • 在Windows从节点上打开Git Bash或者PowerShell(确保安装了OpenSSH),执行ssh-keygen -t rsa一路回车生成密钥对;
  • 把生成的公钥文件(默认是C:\Users\[你的用户名]\.ssh\id_rsa.pub)内容复制到Linux机器的~/.ssh/authorized_keys文件中;
  • 之后Jenkinsfile里的命令就可以简化成:
    bat 'ssh -p 22 pxx1g9x@1x.1xx.13x.3x'
    
    不用再写密码,还能避免各种字符解析问题。

2. 使用sshpass工具传递密码

如果暂时没法用密钥,你可以在Windows从节点安装sshpass(比如通过Git Bash、Cygwin或者Chocolatey安装),然后用它来包裹密码,避免@符号被解析:

bat 'sshpass -p "Qwerty@118" ssh -p 22 pxx1g9x@1x.1xx.13x.3x'

注意给密码加上双引号,确保特殊字符被正确识别。

3. 用Jenkins凭证管理存储密码(进阶安全优化)

即使要用密码,也别直接写在Jenkinsfile里,用Jenkins的凭证管理来存储:

  1. 在Jenkins后台创建一个"字符串"类型的凭证,把密码Qwerty@118存进去,记好凭证ID(比如linux-server-ssh-password);
  2. 在Jenkinsfile中引用这个凭证:
    withCredentials([string(credentialsId: 'linux-server-ssh-password', variable: 'SSH_PASSWORD')]) {
        bat "sshpass -p \"${SSH_PASSWORD}\" ssh -p 22 pxx1g9x@1x.1xx.13x.3x"
    }
    
    这样密码不会明文出现在代码里,也能避免字符解析问题。

4. 不推荐的管道方式(仅应急用)

如果以上工具都没法用,你可以尝试用管道传递密码,但这种方式可能因为SSH的交互验证失效,而且安全性极低:

echo Qwerty@118 | ssh -p 22 -o StrictHostKeyChecking=no pxx1g9x@1x.1xx.13x.3x

加上-o StrictHostKeyChecking=no是为了避免首次连接时的主机确认提示,但这会降低安全性,只建议临时测试用。

内容的提问来源于stack exchange,提问作者vickey99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:12:41