https://confluence.atlassian.com/pages/viewpage.action?pageId=270827678
但现在每次我想使用git它说我没有权限,直到我这样做:
ssh-agent /bin/bash && ssh-add ~/.ssh/id_rsa
为什么会这样?我在本地计算机上轻松完成,但远程服务器运行不佳.
更新
当我做
ssh-agent
我明白了
SSH_AUTH_SOCK=/tmp/ssh-blGr6z5dJjit/agent.14183; export SSH_AUTH_SOCK; SSH_AGENT_PID=14184; export SSH_AGENT_PID; echo Agent pid 14184;
但是我试着去做git fetch,我得到了这个:
Permission denied (publickey). fatal: The remote end hung up unexpectedly
即使我添加了密钥
ssh-add ~/.ssh/bitbucket
我收到这个错误
Could not open a connection to your authentication agent.
解决方法
当您键入ssh-agent / bin / bash时,会启动ssh-agent的一个实例,只要该shell处于活动状态,它就会一直运行.默认情况下,ssh-agent将仅由该shell使用,并且一旦关闭该shell就会终止.
如果您只键入ssh-agent,则代理将在后台启动,即使您关闭shell也会继续运行. ssh-agent命令将在stdout上打印命令,可以输入该命令以开始使用该ssh-agent.您每次都必须键入这些命令.
您可以通过键入eval $(ssh-agent)启动后台ssh-agent并开始在当前shell中使用它.但是,您必须在某处存储SSH_AUTH_SOCK环境变量,并在再次登录时进行设置.
有了这些背景信息,我有三个建议,如何始终让代理可用.
>在服务器上使用屏幕会话.当你启动屏幕时输入eval $(ssh-agent);屏幕,该代理将继续在服务器上运行,如果您稍后再次连接到该屏幕,它仍将记住要使用的代理.
>在〜/ .bash_profile文件中插入命令以查找活动代理(如果存在)并设置SSH_AUTH_SOCK环境变量.
>使用ssh代理转发在客户端上使用代理,而不是在服务器上使用代理.在使用之前,请确保您了解其安全隐患.
从〜/ .bash_profile中查找ssh-agent可以使用看起来像这样的脚本来完成
#!/bin/bash for P in /tmp/ssh-*/agent.* do if [ -O "$P" ] && [ -O "$(dirname "$P")" ] then L=$(SSH_AUTH_SOCK="$P" timeout 1s ssh-add -l > >(wc -l)) case $? in 0) echo "$L $P" ;; 1) echo "0 $P" ;; esac fi & done | sort -rn | if read N P then echo "SSH_AUTH_SOCK='$P'; export SSH_AUTH_SOCK" else ssh-agent fi
这可以从〜/ .bash_profile中调用,就像这个eval $(find-agent)一样(假设脚本被命名为find-agent.)