ssh-agent должен запускаться каждый раз на моем сервере

Я использовал этот учебник по 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;

но чем я пытаюсь сделать 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.

2 ответа

Решение

Вопрос был немного неясным, так что этот ответ может быть действительно для другого вопроса. Но так как ответ все еще может оказаться полезным для других, я думаю, что его стоит сохранить.

Когда вы печатаете ssh-agent /bin/bash запускается экземпляр ssh-agent, который будет работать до тех пор, пока эта оболочка активна. По умолчанию этот ssh-agent будет использоваться только этой оболочкой, и он прекратит работу после закрытия этой оболочки.

Если вместо этого вы только печатаете ssh-agentагент будет запущен в фоновом режиме, который продолжает работать, даже если вы закроете оболочку. Команда ssh-agent напечатает команды на stdout, которые можно ввести, чтобы начать использовать этот ssh-agent. Вам придется вводить эти команды каждый раз.

Вы можете запустить фоновый ssh-agent и начать использовать его в текущей оболочке, набрав eval $(ssh-agent), Однако вы должны хранить SSH_AUTH_SOCK где-то переменная окружения и установите ее, если вы снова войдете

Имея эту справочную информацию, у меня есть три предложения о том, как всегда иметь агента в наличии.

  • Используйте сеанс экрана на сервере. Когда вы запускаете тип экрана eval $(ssh-agent) ; screen, этот агент будет работать на сервере, и если вы подключитесь к этому экрану позже, он все равно будет помнить, какой агент использовать.
  • Вставьте команды в свой ~/.bash_profile файл, чтобы найти активный агент, если таковой существует и установить SSH_AUTH_SOCK переменная окружения.
  • Используйте пересылку агента ssh, чтобы использовать агент на клиенте, а не на сервере. Убедитесь, что вы понимаете последствия этого для безопасности, прежде чем использовать его.

Нахождение ssh-агента из ~/.bash_profile может быть сделано с помощью скрипта, похожего на это

#!/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.)

Команда ssh может завершиться ошибкой с сообщением об ошибке Permission denied (publickey)., но работайте, если вы предварительно загрузите тот же ключ в агент, если вы неправильно настроили ssh-клиент.

По умолчанию ssh а также ssh-add будет загружать ключи из одних и тех же мест, поэтому либо оба найдут нужный ключ, либо ни один не найдет его. Однако в /etc/ssh/ssh_config а также ~/.ssh/config, вы можете переопределить путь, используемый ssh сквозь IdentityFile установка.

Если ~/.ssh/config содержит неверный IdentityFile настройки, вы увидите симптомы, описанные в вашем посте.

Другие вопросы по тегам