我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
中获取它),但我只得到代理的pid。
每次进入主持人时,我怎样才能避免经历这个过程?
我的* NIX技能很弱,因此欢迎对帖子的任何方面进行建设性的批评,而不仅仅是我使用ssh-agent
。
答案 0 :(得分:0)
简短回答:
在本地运行ssh-agent并添加身份时,ssh -A user@host.webfaction.com
在远程主机上提供具有本地代理身份的安全shell。
答案很长:
正如Charles所说,agent forwarding是解决方案。
起初,我认为我可以发出ssh user@host.webfaction.com
,然后在远程主机的安全会话中,使用hg + ssh连接到BitBucket存储库。但那失败了,所以我调查了ForwardAgent and AgentForwardingEnabled flags。
认为我必须解决.bashrc中涉及将我的私钥保存在远程主机上的解决方法,我去寻找一个shell脚本解决方案,但是这个kludge不受此answer in SuperUser的影响,这是完美的,没有任何客户端配置工作(我不知道如何在WebFaction上配置sshd服务器)。
除此之外:在我的问题中,我发布了以下内容:
ps aux | grep 1234.*ssh-agent`
kill -SIGHUP 43210
但这实际上效率低下,需要用户知道他/她的uid(可通过/etc/passwd
获得)。 pgrep
更容易:
pgrep -u username process-name