该命令如下:
putty -ssh -2 -P 22 USERNAME@SERVER_ADDR -pw PASS -m command.txt
其中 'command.txt' 是在服务器中执行的 shell 脚本SSH。
如果我从 Windows 命令提示符启动此命令,它就会起作用。shell 脚本在服务器计算机上执行。
如果我启动使用此批处理命令配置的 Hudson 作业的构建,它不起作用。构建正在运行...运行...运行...没有任何反应,我必须手动停止它。
是否可以从 Hudson 作业启动外部程序(即 PuTTY)?
附言:我尝试了 SSH 插件但是......并不是一个很好的插件(构建前/后、Hudson 未捕获到的启动命令的失败状态等)
这些是构建日志:
[workspace] $ cmd /c call C:\WINDOWS\TEMP\hudson7429256014041663539.bat
C:\Hudson\jobs\Artifact deployer\workspace>putty -ssh -2 -P 22 USER@SERV_ADD -pw PASS -m com.txt
Le build a été annulé
Finished: ABORTED
以及同时的Hudson.err.log文件(停止后):
3 juin 2010 18:27:28 hudson.model.Run run
INFO: Artifact deployer #6 aborted
java.lang.InterruptedException
at java.lang.ProcessImpl.waitFor(Native Method)
at hudson.Proc$LocalProc.join(Proc.java:179)
at hudson.Launcher$ProcStarter.join(Launcher.java:278)
at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:83)
at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:58)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601)
at hudson.model.Build$RunnerImpl.build(Build.java:174)
at hudson.model.Build$RunnerImpl.doRun(Build.java:138)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416)
at hudson.model.Run.run(Run.java:1241)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:124)
我的shell脚本只在服务器上的“hello.txt”文件中写入“hello”,并没有执行任何操作。
答案1
问题是,您需要使用运行 Hudson 的用户名来接受密钥。因此,如果您不使用本地系统帐户运行 Hudson(无论如何这都是一个坏主意),您必须使用 Hudson 帐户登录并接受密钥。然后您的 Hudson 构建将正常工作。
如果 Hudson 使用本地系统帐户运行,则可能有一个选项,但我不确定它是否有效。首先,您必须允许 Hudson 服务与桌面交互。然后以管理员身份登录到您的服务器。我不确定您是否需要亲自登录到该服务器。启动普林克或 PuTTY 并希望出现一个弹出窗口,然后您可以接受密钥,一切都应该正常工作。
另一个选择是使用鲁纳斯命令并提供您的(不同的)用户凭据。
另一个选择是:获取Quest 的 Plink并使用选项-auto_store_key_in_cache
。
答案2
答案3
正如 Peter Schuetze 指出的那样,您必须使用运行 Hudson 的用户名来接受密钥。我的解决方案是使用标准 putty 和 plink,如下所示:
- 使用您需要的连接详细信息通过 putty 设置会话并保存
- 连接一次,接受密钥
- 使用 regedit,完全导出 [HKEY_CURRENT_USER\Software\SimonTatham]
- 将“HKEY_CURRENT_USER”替换为“HKEY_USERS\S-1-5-18”,这是本地系统帐户的安全标识符
- 保存 .reg 文件并双击导入
通过这样做,您现在拥有了接受的主机密钥以及与本地系统帐户进行 plink 连接时可用的会话的所有设置。
尤其当您还设置了该会话未受密码保护的私钥文件时非常方便。
答案4
我最喜欢的进入另一台机器环境的方式是在目标机器上创建一个从属机器并运行脚本。我广泛使用这种方法来避免在硬盘上存储未加密的密码。查看 hudson 文档了解如何做到这一点。