linux – ssh-agent需要每次都在我的服务器上启动

前端之家收集整理的这篇文章主要介绍了linux – ssh-agent需要每次都在我的服务器上启动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用这个bitbucket教程提供对git repo的ssh访问:
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.)

猜你在找的Linux相关文章