我目前正在查看部署选项。我在 Windows 机器上使用 Jenkins 来控制到多个远程 Windows 服务器的部署。
部署涉及在远程 Windows 服务器上执行批处理脚本,到目前为止,psexec 似乎可以解决问题。我遇到的一个问题是,我需要以纯文本形式向 psexec 提供我的密码。
有谁知道 psexec 的 SSH 公钥/私钥的等效物,或者 Windows 的其他无密码远程登录,可以让我同步文件和执行批处理脚本?
答案1
我不知道有什么真正类似于 Windows 的基于 SSH 密钥的身份验证的东西。但这里有一些想法:
从这里,我发现如果您首先连接到远程主机的 ipc$ 共享,然后运行 psexec,那么 psexec 将自动在 ipc$ 连接的上下文中运行。
因此在您的批处理文件中:
net use \\myserver\IPC$ /user:MyID MyPassword
psexec \\myserver c:\whatever.cmd
这将阻止您的用户名/密码以明文形式通过网络发送。但是,它会使您的用户名/密码在批处理文件中可见。
解决这个问题的一种方法是编写一个可执行程序,其唯一功能是运行“net use \[命令行参数]\IPC$ /user:MyID MyPassword”。(我个人会使用类似 autoit 的程序来编写 .exe。)假设我们将其命名为“nu.exe”。那么您的秘密用户名/密码至少嵌入在“nu.exe”中,因此不是明文。虽然可能可以通过以下方式进行逆向工程反编译,至少在某种程度上是模糊的。
那么你的流程是:
nu.exe myserver
psexec \\myserver c:\whatever.cmd
但是您需要将 nu.exe 保存在安全的地方,因为任何有权访问它的人都可以使用您嵌入到 nu.exe 中的任何 ID 在远程主机上执行程序。
因此,这两个选项都有缺点,但也许其中一个适合您......
答案2
行政助理使用 -p@ 和 -p@d 参数有一个更好的解决方案。
它允许您将密码写入文件,运行 PAExec,它会立即读取文件然后将其删除。它仍然不如使用公钥/私钥的 SSH 好,但是一种选择……