运行 Pageant 完成加载 SSH 密钥时的批处理文件

Run a batch file when Pageant finishes loading SSH keys

我写了两个批处理文件——一个用于启动 Pageant 并加载我的密钥,另一个用于将一些文件通过 ssh 连接到远程服务器。单独来看,这些脚本可以完美运行。我试图将它们合并到一个批处理文件中,但我无法让它工作。

这是脚本 - 每个只有一行,真的。

要启动选美和加载密钥:

start E:\PuTTY\pageant.exe E:\Keys\priv.ppk

exit

要使用 pscp:

pscp F:\website\foobar\src\* foo@178.128.10.35:/var/www/html

问题是第一个脚本启动了密码提示。如果我完成这个然后启动下一个脚本,一切都会完美无缺。但是我一直无法将这两个组合成一个脚本,使第二个命令在第一个命令的提示完成后运行。我将如何创建这样做的批处理文件?

你很难在批处理文件中解决这个问题。 Pageant 是 GUI 应用程序。它几乎无法以某种方式向批处理文件发送已完成加载密钥的信号。

因此,Pageant has -c switch,这使得它 运行 在加载密钥后成为指定的 program/batch-file:

You can arrange for Pageant to start another program once it has initialised itself and loaded any keys specified on its command line. This program (perhaps a PuTTY, or a WinCVS making use of Plink, or whatever) will then be able to use the keys Pageant has loaded.

You do this by specifying the -c option followed by the command, like this:

C:\PuTTY\pageant.exe d:\main.ppk -c C:\PuTTY\putty.exe

所以这应该是你想要的:

start E:\PuTTY\pageant.exe E:\Keys\priv.ppk -c C:\path\your_scp_batch.bat

如果另一个实例已经 运行,您可以利用选美的行为方式。这样您就可以将密钥加载到 pageant 中,然后在单个脚本中继续使用它。

START pageant.exe
TIMEOUT 1
pageant.exe E:\Keys\priv.ppk

:: Do stuff here.

TASKKILL /im pageant.exe

工作原理如下:

  • START pageant.exe 在后台开始选美。
  • TIMEOUT 1 暂停脚本一秒钟以确保选美在执行下一行之前 运行。
  • pageant.exe E:\Keys\priv.ppk 再次启动 pageant 并告诉它加载密钥。由于另一个 pageant 实例已经 运行,此实例在加载密钥后终止,使脚本仅在那时继续。
  • TASKKILL /im pageant.exe杀死选美所以钥匙不能再使用