作者:123妖_精 | 来源:互联网 | 2023-06-07 20:04
问题:
在Jenkins的自动构建中,配置putty命令行的批处理或是Shell无法执行, 会一直卡住不动。 但是在命令行中单独执行这个命令是正常的。
发生场景:
Putty 除了可以在界面操作之外,也可以使用命令行操作。所以在Jenkins中可以使用putty直接执行登录后的一些操作, 类似:
putty.exe -pw mypass -m myfile.txt user1@host1
- 以上命令是: 用户user1使用密码mypass 登陆host1主机, 并且执行myfile.txt 脚本。
注意: myfile.txt 位于本地机器。
Jenkins的任务启动时, 控制台会一直卡住不动。把以上命令写到bat 文件中, Jenkins调用 bat, 问题依旧。
原因及解析:
putty.exe 的执行会弹出本地GUI界面, 这个操作需要有特定的权限。
解决方法:
针对上面的原因, 有一种解法是设置Jenkins 服务与桌面交互的权限, 设置界面如下:
设置后需重启。
以上解决笔者没有实际验证, 这里推荐一个更好的解法, 就是使用plink 替代putty。plink 是Putty官方提供的专门的命令行工具。
官方的下载页面是:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html, 也可以到如下地址下载:
https://download.csdn.net/download/oscar999/19866051
plink 的命令方式和putty 类似,比如:
plink.exe -pw mypass -m myfile.txt user1@host1
但是注意, 使用以上命令虽然不会卡住, 但是putty 的命令不会被执行, 因为在执行前需要确认是否缓存中存储服务主机的密钥, 这就类似在界面中操作出现是否保存主机Key 的命令交互。解决方法是使用管道命令方式, 即将前一个命令的输入作为后一个命令的输出, 完整的命令如下如下:
echo y | plink -ssh user1@host "exit"
- echo y,相对于输入y,即确认在缓存中存储服务主机的密钥
- 管道用于对这个的应答
Store key in cache? (y/n)
- exit 用于关闭对话