Назад | Перейти на главную страницу

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

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

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

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

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

Вы можете запустить фоновый ssh-агент и начать использовать его в текущей оболочке, набрав 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 настройки, вы увидите симптомы, описанные в вашем сообщении.