Я использовал этот учебник по битбакету для предоставления 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-агента из ~/.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
настройки, вы увидите симптомы, описанные в вашем сообщении.