繁体   English   中英

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

[英]Run a batch file when Pageant finishes loading SSH keys

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

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

要启动 Pageant 并加载密钥:

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具有-c switch ,这使得它在加载密钥后运行指定的程序/批处理文件:

一旦Pageant初始化了自己的程序并加载了其命令行上指定的任何键,就可以安排Pageant启动另一个程序。 然后,该程序(可能是PuTTY或使用Plink的WinCVS或任何其他工具)将能够使用Pageant加载的键。

您可以通过在命令后指定-c选项来执行此操作,如下所示:

 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

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

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 并告诉它加载密钥。 由于另一个选美实例已在运行,因此该实例在加载密钥后终止,使脚本仅在那时继续运行。
  • TASKKILL /im pageant.exe杀死选美使密钥无法再使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM