我已经使用这个bitbucket教程提供SSH访问的Git仓库: 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;
但比我试图做混帐取,我得到这个:
Permission denied (publickey). fatal: The remote end hung up unexpectedly
即使我添encryption钥后
ssh-add ~/.ssh/bitbucket
我得到这个错误
Could not open a connection to your authentication agent.
这个问题有点不清楚,所以这个答案可能真的是一个不同的问题。 但是由于答案可能对其他人有用,所以我觉得值得留意。
当你inputssh-agent /bin/bash一个ssh-agent的实例,只要这个shell是活动的,它将一直运行。 默认情况下,ssh-agent将仅被该shell使用,并且一旦closures该shell就会终止。
如果您只需键入ssh-agent ,则代理将在后台启动,即使closures该shell,该代理也将继续运行。 ssh-agent命令将在stdout上打印命令,可以input该命令以开始使用该ssh-agent。 你将不得不每次input这些命令。
你可以通过键入eval $(ssh-agent)来启动一个后台的ssh-agent并开始在当前的shell中使用它。 但是,如果您再次login,则必须将SSH_AUTH_SOCK环境variables存储在某个地方并进行设置。
有了这样的背景信息,我有三个build议,如何去总是有代理人可用。
eval $(ssh-agent) ; screen eval $(ssh-agent) ; screen ,该代理将继续在服务器上运行,如果稍后再次连接到该屏幕,它仍将记住要使用的代理。 ~/.bash_profile文件中插入命令以查找活动代理(如果存在)并设置SSH_AUTH_SOCK环境variables。 从~/.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 NP then echo "SSH_AUTH_SOCK='$P'; export SSH_AUTH_SOCK" else ssh-agent fi
可以从~/.bash_profile调用这个eval $(find-agent) (假设脚本被命名为find-agent)。
ssh命令可能会失败,错误消息Permission denied (publickey). ,但如果您事先将相同的密钥加载到代理程序中,如果您错误地configuration了ssh客户端,则会工作。
默认情况下, ssh和ssh-add会从相同的位置加载密钥,所以两者都会find所需的密钥,或者都不会find它。 但是在/etc/ssh/ssh_config和~/.ssh/config ,您可以通过IdentityFile设置覆盖ssh使用的path。
如果~/.ssh/config包含错误的IdentityFile设置,您将看到您的文章中描述的症状。