0

我通过 ssh 连接到一个共享主机(WebFaction),然后使用它ssh-agent来建立到一个 mercurial 存储库(BitBucket)的连接。我这样称呼代理:

eval `ssh-agent`

然后这会喷出代理的 pid 并设置其相关的环境变量。然后我使用 ssh-add 如下添加我的身份(在输入我的密码后):

ssh-add /path/to/a/key

我的 ssh 连接最终超时,我与服务器断开连接。当我重新登录时,我无法再连接到 Hg 服务器,所以我这样做:

ps aux | grep 1234.*ssh-agent`
kill -SIGHUP 43210

然后重复帖子顶部的两个命令(即使用eval和调用调用代理ssh-add)。

我确信有一个成熟的习语可以避免这个过程并保持对最初产生的代理的“引用”。我尝试将第一个命令的 I/O 重定向到一个文件(希望在我.bashrc的 .

我如何避免每次 ssh 进入主机时都必须经历这个过程?

我的 *NIX 技能很弱,因此欢迎对帖子的任何方面提出建设性的批评,而不仅仅是我使用ssh-agent.

4

1 回答 1

0

简短的回答:

通过在本地运行 ssh-agent 并添加身份,ssh -A user@host.webfaction.com为远程主机上的安全 shell 提供本地代理的身份。

长答案:

正如查尔斯建议的那样,代理转发是解决方案。

起初,我认为我可以发出一个ssh user@host.webfaction.com然后,从远程主机上的安全会话中,使用 hg+ssh 连接到 BitBucket 存储库。但那失败了,所以我调查了ForwardAgent 和 AgentForwardingEnabled 标志

考虑到我必须解决 .bashrc 中涉及将我的私钥保存在远程主机上的解决方法,我去寻找一个 shell 脚本解决方案,但在 SuperUser 的这个答案中幸免于难,这是完美的,而且无需任何客户端配置即可工作(我不确定如何在 WebFaction 上配置 sshd 服务器)。

另外:在我的问题中,我发布了以下内容:

ps aux | grep 1234.*ssh-agent`
kill -SIGHUP 43210 

但这实际上效率低下,并且需要用户知道他/她的 uid(可通过 获得/etc/passwd)。pgrep容易得多:

pgrep -u username process-name
于 2012-08-02T19:50:18.887 回答