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的凭证管理来存储:
- 在Jenkins后台创建一个"字符串"类型的凭证,把密码
Qwerty@118存进去,记好凭证ID(比如linux-server-ssh-password); - 在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
相关产品推荐
相关产品推荐

