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
настройки, вы увидите симптомы, описанные в вашем посте.