我已经安装了 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_agent
或keychain
)~/.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