ssh-add жалуется: не удалось открыть соединение с вашим агентом аутентификации

151

Я пытался начать ssh-addработать над RaspberryPi под управлением Raspbian.

Я могу начать ssh-agent, когда я делаю это дает следующий вывод в терминал:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

Если я бегу, ps aux | grep sshя вижу, что он бежит.

Затем я пытаюсь запустить ssh-add, чтобы добавить ключевую фразу, и получаю следующее:

Could not open a connection to your authentication agent.

Есть идеи?

Даниэль Гровс
источник
6
Попробуйтеeval $(ssh-agent)
Ульрих Дангел

Ответы:

224

Ваша оболочка предназначена для оценки вывода этого шелл-кода ssh-agent. Запустите это вместо:

eval "$(ssh-agent)"

Или, если вы уже запустили ssh-agent, скопируйте его и вставьте в приглашение оболочки (при условии, что вы используете оболочку типа Bourne).

sshКоманды должны знать, как общаться с ними ssh-agent, они знают это из SSH_AUTH_SOCKпеременной окружения.

Стефан Шазелас
источник
Спасибо, я не совсем понял, как это работает. Это очень ценится.
Даниэль Гровс
2
Или вы можете ввести ssh-agent bash и после того, как ssh-add будет работать
RaduM
@ Stephane, правильно ли я понимаю, что команда ssh-agent просто печатает результат своего выполнения, в то время как eval version фактически выполняет команду?
Денис С.
5
@DenysS. Нет, он выполняет настройку, а затем сообщает вашей оболочке, как обновить среду, чтобы иметь возможность связаться с ней. Он не может сделать это сам по себе. Он может запустить новую оболочку с обновленной средой (вот что ssh-agent bashделает), но он не может обновить память отдельного процесса, выполняющего чужую команду (ваша уже запущенная оболочка).
Стефан Шазелас
@StephaneChazelas, если мой ssh-агент запускается при загрузке, но мне все еще нужно проверить его в моей оболочке, значит ли это, что он не оценивается автоматически для каждой оболочки и должен каким-либо образом настраиваться пользователем root?
Денис С.
27

Попробуй это:

$ ssh-agent /bin/sh
$ ssh-add $yourkey
user48656
источник
5
Это действительно сработало для меня, где ни один из других ответов не сработал.
Джозеф Сноу
2
Если вы используете рыбную скорлупу, этот ответ работает. ssh-agent /usr/bin/fish,
slackmart
1
Я получаю сообщение об ошибке: « Не удалось открыть соединение с вашим агентом аутентификации ».
Игорь Ганапольский,
@slackmart Если вы установили рыбу в BSD, ее местоположение /usr/local/bin/fish(альтернативно /usr/ports/shells/fish). Спасибо whereisкоманде за то, что помогли мне понять это.
CJM
Отлично @cjm, я использую Slackware Linux, и это тот путь, который мне подходит.
slackmart
12

Этот вопрос также был очень хорошо освещен в Stackoverflow .

eval `ssh-agent -s`

ssh-add
хаа
источник
Вы забыли цитаты вокруг `...`. Без них оператор split + glob вызывается на выходе.
Стефан Шазелас
6

Если вы используете csh в качестве оболочки ( FreeBSD PI ), это может сработать:

eval `ssh-agent -c`

Далее вам нужно всего лишь сделать что-то вроде:

ssh-add ~/.ssh/id_rsa
nbari
источник
Я получаю сообщение об ошибке: « Не удалось открыть соединение с вашим агентом аутентификации ».
Игорь Ганапольский,
2

Вы также можете использовать следующий синтаксис:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'
kenorb
источник
Это не работает для меня, если вы идете, ssh-agent sh -c "ssh-add -l"он скажет вам, что у вас нет личности.
Айн Тохври
Потому что вы должны сначала добавить его, например: ssh-agent sh -c "ssh-add && ssh-add -l"напечатает вашу личность.
Кенорб
1

Попробуйте это: перейдите C:\$Installation_Folder$\Git\cmd и выполните:

start-ssh-agent 

Он откроет команду cmd и запустит ssh-agentправильный путь.

ssh-add ~/.ssh/id_rsa должен тогда работать.

sab125
источник
" bash: start-ssh-agent: команда не найдена "
Игорь Ганапольский
1

Это сбивало с толку, и у него есть 2 возможных хороших ответа, в зависимости от того, пытается ли пользователь добавить ключ ssh в Linux или в Windows (как я). Это, вероятно, не отвечает OP, но является расширением для git-bash. Я запускаю Windows и Ubuntu для разработки, и моя установка git немного отличается в каждой.

Попробуйте это: перейдите в C: \ $ Installation_Folder $ \ Git \ cmd и выполните:

start-ssh-agent Откроет команду cmd и правильно запустит ssh-agent.

.. был хорошим ответом для Windows, но не смог указать, что вы должны были пройти через Windows Explorer, чтобы найти папку установки Git, и запустить оболочку Windows, которая откроется после завершения шага 1.
"перейти к C: \ $ Installation_Folder $ \ Git \ ЦМД»

Шаг 2: вам просто нужно дважды щелкнуть

start-ssh-agent

На шаге 3 вы возвращаетесь к git-bash или к любому эмулятору терминала * nix, который вы используете, и запускаете ssh-add. Если вы использовали имя по умолчанию для открытого ключа ssh, вам не нужно добавлять имя, так как ssh-add использует это автоматически.

Волк халтон
источник
1

Есть несколько способов, если вы хотите использовать идентичность с sudo, например sudo npm install.

Долгий путь , но также дает вам root-доступ, так что вам не придется sudoмного использовать .

  1. Запустите.
    sudo ssh-agent bash
    Это запросит ваш пароль и после запуска ssh-agentс привилегиями суперпользователя,
  2. Перейдите в папку .ssh ваших пользователей.
    cd /home/user/.ssh
  3. Оттуда вы можете запустить

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

Короткий путь , только ваш пользователь (если вы не хотите много судить)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME
Belldandu
источник
exportи evalработать так же хорошо, как root, при условии, что оболочка входа в систему root похожа на Bourne. Если оболочкой root является csh или tcsh, используйтеeval `ssh-agent -c`
Стефан Шазелас
Обратите внимание, что вы также можете предоставить rootдоступ к своему ssh-агенту, выполнивsudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Стефан Шазелас
Пробовал и то и другое, и ни один не работал должным образом. все пользователи в моем экземпляре debian jessie, включая root, по умолчанию настроены на использование bash.
Беллданду
Что ты пробовал? eval "$(ssh-agent)"по приглашению оболочки bash, работающей от имени root, все будет работать. Очевидно, вам нужно будет запустить sshиз этой оболочки или ее потомка, чтобы они наследовали переменную SSH_AUTH_SOCK env. eval "$(sudo ssh-agent)"; sudo ssh...не будет работать, потому что sudoпо умолчанию не передается переменная SSH_AUTH_SOCK env.
Стефан Шазелас
Я пытался eval "$(ssh-agent)"смотреть позже, чтобы увидеть, есть ли какая-то ошибка конфигурации. Хотя текущий способ, которым я дал это руководство, позволяет свободно контролировать, каким пользователем вы хотите быть, так как вы уже являетесь пользователем root и можете получить доступ к любому пользователю id_rsa, который находится на сервере. Так что, как только я получу, что он работает должным образом, отредактируйте мой ответ
Беллданду