在 Pageant 完成加载 SSH 密钥时运行批处理文件
Posted
技术标签:
【中文标题】在 Pageant 完成加载 SSH 密钥时运行批处理文件【英文标题】:Run a batch file when Pageant finishes loading SSH keys 【发布时间】:2019-02-27 13:40:11 【问题描述】:我编写了两个批处理文件 - 一个用于启动 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
问题是第一个脚本启动了密码提示。如果我完成这个然后启动下一个脚本,一切都会完美运行。但是我一直无法将这两个组合成一个脚本,第二个命令在第一个命令的提示完成后运行。我将如何创建一个这样做的批处理文件?
【问题讨论】:
【参考方案1】:你很难在批处理文件中解决这个问题。 Pageant 是 GUI 应用程序。它几乎无法以某种方式向批处理文件发出已完成加载密钥的信号。
为此,Pageant has -c
switch,使其在加载密钥后运行指定的程序/批处理文件:
您可以安排 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
【讨论】:
好的,我会删除我的评论。【参考方案2】:如果另一个实例已经在运行,您可以利用 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 实例已经在运行,因此该实例在加载密钥后终止,使脚本仅在那时继续运行。
TASKKILL /im pageant.exe
杀死选美使钥匙不能再使用。
【讨论】:
以上是关于在 Pageant 完成加载 SSH 密钥时运行批处理文件的主要内容,如果未能解决你的问题,请参考以下文章