当没有本地 shell 参与时,如何解锁私有 SSH 密钥(使用 Cygwin/X11)?

当没有本地 shell 参与时,如何解锁私有 SSH 密钥(使用 Cygwin/X11)?

我已经安装了 Cygwin/X11,包括。我已经设置了公钥/私钥对。我已经在RemoteHostopenssh中安装了公钥。~/.ssh/authorized_keys

我已经配置了 Cygwin/X11 (通过~/.XWinrc) 来提供一个在本地终端打开 RemoteHost shell 的菜单项:

menu root {
    RemoteShell    exec    "/bin/xterm.exe -e /usr/bin/ssh -Yl <user> RemoteHost"
}

RootMenu root

我希望在第一次选择此菜单项时询问我的私钥密码。我确实不是希望在后续呼叫中被查询。

由于没有本地 shell,也就是说,我无法在 中执行任何操作(例如设置ssh_agentkeychain~/.bash_profile,所以我有点不知所措。也没有 shell 可以进入关键词。

当没有本地 shell 参与时,如何解锁我的私人 SSH 密钥?

答案1

  • 您可以ssh-agent在后续的 shell 中启动,并将环境变量导出到新的 shell 中(例如,从第一个 shell 中创建的文件中导出)

    ssh-agent > ~/.ssh_agent_env
    source ~/.ssh_agent_env
    
  • 您可以使用 GUI 提示符来要求输入密码,该提示符ssh由环境变量提供SSH_ASKPASS。在 Linux 中,通常gnome-askpass或类似。在 cygwin 中也会有类似的东西。

  • AddKeysToAgent一个选项,它将把新使用的键添加到运行中ssh-agent以实现您的需要。

这两者都需要在调用最终的之前进行一些编码/检查ssh,例如您可以在中调用的 bash 脚本RemoteShell exex /path/to/my/script.sh,例如:

#!/bin/bash
ps aux | grep ssh-agent | grep -v grep
if [ "$?" = "1" ]; then
  # start a new agent (in a background) and store its environent
  ssh-agent > ~/.ssh_agent_env
end
# load existing ssh-agent connection
source ~/.ssh_agent_env

/bin/xterm.exe -e /usr/bin/ssh -oAddKeysToAgent=yes -Yl <user> RemoteHost
# or do whatever magic you want

相关内容