我这里有一点鸡蛋问题。
问题
我想通过SSH连接到远程计算机并转发我的本地gpg-agent。问题是远程计算机上的gpg-agent仅在建立SSH连接后才启动。虽然gpg-agent没有在远程计算机上运行,但在指定转发时我无法通过SSH连接到远程计算机。
鉴于此,此命令不起作用,因为远程gpg-agent未运行,因此 /run/user/1000/gnupg/S.gpg-agent 不会还存在。
ssh -R /run/user/1000/gnupg/S.gpg-agent:/run/user/1000/gnupg/S.gpg-agent user@remotemachine
解决方法
另一种方法是以交互方式/手动方式,如下所示。
ssh user@remotemachine
我现在通过SSH连接,作为副作用,gpg-agent也自动启动了。
当我现在更新现有的SSH连接时,打开SSH PTY:
[enter]
~C
ssh> -R /run/user/1000/gnupg/S.gpg-agent:/run/user/1000/gnupg/S.gpg-agent
Forwarding port.
[enter]
我现在可以通过使用我的本地gpg-agent在远程计算机上运行我的GPG命令。
目标
我想自动完成上述解决方法。基本上我想用ssh user@remotemachine
通过SSH连接到远程计算机,然后远程计算机会自动将SSH转发添加到现有的SSH连接。
问题
如何让远程计算机自动更新新建立的SSH连接并添加gpg-agent转发?
答案 0 :(得分:1)
由于您使用了expect
标记,因此这是一个简单的expect
脚本,应该足够了。
#!/usr/bin/expect -f
spawn ssh user@remotemachine
expect {$ }
send "date\r"
expect {$ }
send "~C"
expect "ssh> "
send -- "-R /run/user/1000/gnupg/S.gpg-agent:/run/user/1000/gnupg/S.gpg-agent\r"
expect -timeout 5 timeout exit "\r\n"
send "echo ok\r"
expect "\nok\r"
expect {$ }
interact
将此文件放入文件中并对其执行chmod +x
。出于某种原因,我发现我没有收到Forwarding port
命令中的-R
消息,除非我启用ssh -v
,所以我只检查\r\n
,但您可以更改这个。另外,我假设来自远程的shell提示符为$
,因此您可能也需要更改它,但如果您的提示符为[enter]
,那么您需要说
expect -ex {[enter]}
以避免将字符串解释为正则表达式。