Не удалось открыть соединение с вашим агентом аутентификации


1607

Я сталкиваюсь с этой ошибкой:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

Я попытался добавить ключи, и я получаю эту ошибку ниже:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
Вопрос: как только вы пройдете КАЖДЫЙ ответ на этой странице, и ни один из них не сработает. Что вы можете сделать дальше?
Брэндон Бертельсен

8
@BrandonBertelsen Попробуйте это: $ ssh-agent /bin/sh и $ ssh-add $yourkey
shyam

@BrandonBertelsen Далее вы должны использовать, git config --listчтобы увидеть, если вы установили credential.helper- если у вас есть, вы должны удалить этот параметр, так как помощник бесполезен.
йойо

Ответы:


2386

Вы начали ssh-agent?

Вам может потребоваться запустить ssh-agentперед запуском ssh-addкоманды:

eval `ssh-agent -s`
ssh-add

Обратите внимание, что это запустит агент для msysgit Bash в Windows . Если вы используете другую оболочку или операционную систему, вам может потребоваться использовать вариант команды, такой как перечисленные в других ответах .

Смотрите следующие ответы:

  1. ssh-add жалуется: не удалось открыть соединение с вашим агентом аутентификации
  2. Git push требует имя пользователя и пароль (содержит подробные инструкции по использованию ssh-agent)
  3. Как запустить (git / ssh) агент аутентификации? ,
  4. Не удалось открыть соединение с вашим агентом аутентификации

Чтобы автоматически запустить ssh-agent и позволить одному экземпляру работать в нескольких окнах консоли, см. Раздел Запуск ssh-agent при входе в систему .

Почему мы должны использовать evalвместо просто ssh-agent?

Чтобы узнать почему, смотрите ответ Робин Грин .

Публичные и частные ключи

Кроме того, всякий раз, когда я использую ssh-add, я всегда добавляю к нему закрытые ключи. Файл ~/.ssh/id_rsa.pubвыглядит как открытый ключ, я не уверен, что это будет работать. У вас есть ~/.ssh/id_rsaфайл? Если вы откроете его в текстовом редакторе, он говорит, что это закрытый ключ?


18
@ xtian Я не уверен, что понимаю проблему. Я не знаю точных деталей, но я предполагаю, что закрытый ключ никогда не отправляется по сети. Я думаю, что ssh-addпросто расшифровывает зашифрованный закрытый ключ на хост-машине, чтобы его можно было использовать локально ... он никогда никому не отправлялся . Я предполагаю, что только открытые ключи когда-либо передаются по сети. Мое понимание неверно?

6
Ты слишком добрый Кекс. Ты абсолютно прав. Виноват. бывший здесь ; ssh-add добавляет закрытый ключ для ssh-агента пользователя (запущенный процесс), который может действовать от имени клиента / хоста, когда сервер принимает rsa-любые ключи. Geez. Я не знаю, что меня так взволновало.
сентября

22
Мне любопытно, почему eval ssh-agent -sработает, но сам ssh-agentпо себе это не так.
DanielM

13
@DanielM: SSH нужны две вещи для использования ssh-agent: экземпляр ssh-agent, работающий в фоновом режиме, и набор переменных среды, который сообщает SSH, какой сокет следует использовать для подключения к агенту ( SSH_AUTH_SOCKIIRC). Если вы просто запустите, ssh-agentагент запустится, но SSH не будет знать, где его найти.
Ванесса Фиппс

4
Спасибо за ответ, хотя. Я только что заметил, что вы использовали обратную кавычку в команде. Я так растерялся, почему backquote (`) работает для команды eval, а не для одинарной / двойной кавычки (',") на моей оболочке bash?
Вейши Цзэн

540

Я пробовал другие решения безрезультатно. Я провел дополнительные исследования и обнаружил, что работает следующая команда. Я использую Windows 7 и Git Bash .

eval $(ssh-agent)

Больше информации в: https://coderwall.com/p/rdi_wq


14
Работал на Windows 8 тоже.
Андреас Рудольф

Я также использую Windows 7 и Git Bash, и мой ответ работает отлично. Круто, что ты тоже можешь сделать это тоже так.

2
Большой !! Работал с windows 10 тоже.
НитинМ

1
Работал над
Манджаро

1
$ eval "$ (ssh-agent -s)" работал для меня в Windows 10
Эндрю Андерсон

262

Следующая команда работала для меня. Я использую CentOS.

exec ssh-agent bash

3
Спасибо, это сработало для меня, я запустил exec ssh-agent zsh для своей оболочки.
Jasonmcclurg

2
Согласно этому удаленному «ответу» , он работает и на Amazon Linux AMI. Я думаю, что это решение Unix / Linux / * nix.

4
Я заскочил в док-контейнер и ssh-add my.id_rsaпотерпел бы неудачу. Но exec ssh-agent zshдал среду, где я мог ssh-addбез проблем. И я нахожусь в моем контейнере
докеров

Может кто-нибудь, пожалуйста, кратко объясните, в чем проблема? Спасибо :) Это работало на моем Ubuntu 14.04 тоже.
harkirat1892

работал и над распбианом
mega_creamery

215

MsysGit или Cygwin

Если вы используете Msysgit или Cygwin, вы можете найти хорошее руководство в SSH-Agent по msysgit, cygwin и bash :

  1. Добавьте файл с именем .bashrcв вашу домашнюю папку.

  2. Откройте файл и вставьте в:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Это предполагает, что ваш ключ находится в обычном ~/.ssh/id_rsaместе. Если это не так, укажите полный путь после ssh-addкоманды.

  4. Добавить или создать файл ~/.ssh/configс содержимым

    ForwardAgent yes
    

    В оригинальном уроке ForwardAgentпарам есть Yes, но это опечатка. Используйте все строчные буквы, иначе вы получите ошибки.

  5. Перезапустите Msysgit. Он попросит вас ввести пароль один раз, и все (до тех пор, пока вы не закончите сеанс или пока ваш ssh-agent не будет убит).

Mac OS X

Если вы не хотите запускать новый ssh-агент каждый раз, когда открываете терминал, проверьте Keychain . Я сейчас на Mac, поэтому я использовал учебник ssh-agent с zsh & keychain для Mac OS X, чтобы настроить его, но я уверен, что поиск Google будет иметь много информации для Windows.

Обновление : лучшее решение для Mac - добавить ключ в связку ключей Mac OS:

ssh-add -K ~/.ssh/id_rsa

Просто как тот.


1
К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

1
Когда я это делаю, eval `ssh-agent -s`процесс не останавливается, когда я выхожу из Cygwin.
Кирилл

Есть ли способ настроить конфиг для Windows / gitbash, чтобы вам не приходилось делать это каждый раз?
mix3d

4
Так и должно быть ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- иначе новый ssh-agent запускается каждый раз. Время от времени убивал мою машину, когда у пользователя были cronjobs.
Измельчение

3
ForwardAgent yesне является обязательным и представляет собой не теоретический риск безопасности, если он установлен для любого ненадежного сервера. Локальный доступ к вашему ключевому агенту должен работать независимо от этого параметра.
SeldomNeedy

208

Не удалось открыть соединение с вашим агентом аутентификации

Чтобы устранить эту ошибку:

Баш:

$ eval `ssh-agent -s`

Tcsh:

$ eval `ssh-agent -c`

Затем используйте ssh-addкак обычно.


Горячий совет:

Я всегда забывал, что печатать для вышеприведенных команд ssh-agent, поэтому я создал псевдоним в своем .bashrcфайле следующим образом:

alias ssh-agent-cyg='eval `ssh-agent -s`'

Теперь вместо использования ssh-agentя могу использоватьssh-agent-cyg

Например

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

Первоначальный источник исправления:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
вам нужно будет запускать evalкоманду каждый раз, когда вы выполняли ранее ssh-agent. Теперь я использую псевдоним, см. Обновленный ответ о том, как я это делаю.
Крис Сноу

1
К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

Мне также нужно было использовать спецификацию ssh вместо https (см. Help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Вы, сэр, вы потрясающие. Спасибо. ** Я столкнулась с той же проблемой при клонировании Bitbucket репо, я уже настроен ключ SSH, но продолжал получать ошибку: fatal: Could not read from remote repository..
Nishant Ghodke

У меня работал на windows 10 и git bash установлен
desmond13

116

Я столкнулся с той же проблемой для Linux, и вот что я сделал:

По сути, команда ssh-agent запускает агент, но на самом деле не устанавливает переменные среды для его запуска. Он просто выводит эти переменные в оболочку.

Тебе следует:

eval `ssh-agent`

и затем сделайте ssh-add. См. Не удалось открыть соединение с вашим агентом аутентификации .


1
К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

У меня тоже работал, когда возникли проблемы с использованием boot2docker на Windows.
Veve

Это было то, что потребовалось для меня.
Том

116

Запустить

ssh-agent bash
ssh-add

Для получения более подробной информации вы можете искать

ssh-agent

или беги

man ssh-agent

7
Я бы порекомендовал, если вы работаете с Git Bash на Windows, попробуйте это.
Neeraj Sewani

@ neer17 это позволило мне использовать ssh-copy-idв Ubuntu. Не знаю, почему я не смог добавить ключ, не ssh-agentзапустив bash.
SomeGuyOnAComputer

2
Это для Windows! (проверено на W10pro, сборка 1809 и git 2.21.0)
Alfabravo

1
Я использую ZSH, и это работает для меня:ssh-agent zsh; ssh-add
sirboderafael

115

Для ssh-add и ssh (при условии, что вы используете реализации openssh) требуется переменная окружения, чтобы знать, как общаться с агентом ssh. Если вы запустили агент в окне командной строки, отличном от того, которое вы используете сейчас, или если вы запустили его неправильно, ни ssh-add, ни ssh не увидят, что эта переменная окружения установлена ​​(поскольку переменная окружения установлена локально для команды подскажите он установлен).

Вы не говорите, какую версию ssh вы используете, но если вы используете cygwin, вы можете использовать этот рецепт от агента SSH на Cygwin :

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

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


1
К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

9
Я был связан здесь с другим таким вопросом. Могу я спросить, почему необходимо добавить это в конфигурационный файл Bash? На моей машине все, что мне нужно сделать, это запустить, eval $(ssh-agent)и я могу использовать ssh без пароля для каждого нового окна терминала.
Энди Джей

Это не должно быть возможно, если вы не запускаете новые терминалы с этого терминала.
Робин Грин

97

Попробуйте выполнить следующие действия:

1) Откройте Git Bash и запустите: cd ~/.ssh

2) Попробуйте запустить агент: eval $(ssh-agent)

3) Прямо сейчас вы можете запустить следующую команду: ssh-add -l


9
Это единственное решение, которое сработало для меня (на Windows 7). Сначала я использовал команду ps aux | grep sshи killв ответе Рика, чтобы убить агентов. После этого ssh-addработал без ключа -l (Использование -l дало ошибку). eval 'ssh-agent'так как в ответе Рика не получилось, мне пришлось использовать eval $(ssh-agent)как в ответе Чечоро здесь.
Фрут

6
+1 У меня была та же проблема, что и у OP (Windows 7), и это единственное решение, которое мне помогло.
Веблурк

1
К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

2
@Frug Это отступники, а не апострофы; в сценарии оболочки это означает выполнить то, что содержится внутри. $(ssh-agent)эквивалентно, `ssh-agent`но более читабельно.
ММ

96

Вместо того, чтобы использовать $ ssh-agent -s, я использовал$ eval `ssh-agent -s` для решения этой проблемы.

Вот что я выполнил шаг за шагом (шаг 2 и далее на GitBash):

  1. Почистил мою папку .ssh на C:\user\<username>\.ssh\
  2. Создан новый ключ SSH
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Проверьте, запущен ли какой-либо идентификатор процесса (ssh agent).
    $ ps aux | grep ssh
  4. (Необязательно) Если найдены какие-либо в шаге 3, убить тех,
    $ kill <pids>
  5. Запустил ssh агент
    $ eval `ssh-agent -s`
  6. Добавлен ключ ssh, сгенерированный на шаге 2, в агент ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.
Чутипонг Роубклом

Вы можете просто перезапустить агент по eval ssh-agent -sи добавить старый ключ, используя ssh-add ~ / .ssh / id_rsa. Если вы генерируете новый ключ SSH, вам нужно будет обновить этот ключ во всех ваших службах, таких как github, bitbucket и т. Д.
Mohit Satish Pawar,

Есть ли способ заставить это выжить перезагрузки Windows? После перезапуска он не будет работать, пока я не ssh-agent -sзапущу " eval " и "ssh-add ~ / .ssh / id_rsa" снова.
Михал Викиан

1
после долгого поиска это решение сработало
Sujit.Warrier

Отличное объяснение!
Авивамг

56

В Windows 10 я попробовал все ответы, перечисленные здесь, но ни один из них, похоже, не работал. На самом деле они дают подсказку. Чтобы решить проблему просто вам нужно 3 команды. Идея этой проблемы заключается в том, что ssh-add необходимо установить переменные окружения SSH_AUTH_SOCK и SSH_AGENT_PID с текущим путем к файлу sock-файла ssh-agent и номером pid.

ssh-agent -s > temp.txt

Это сохранит вывод ssh-agent в файл. Содержание текстового файла будет примерно таким:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

Скопируйте что-то вроде "/tmp/ssh-kjmxRb2764/agent.2764" из текстового файла и выполните следующую команду прямо в консоли:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

Скопируйте что-то вроде «3044» из текстового файла и выполните следующую команду прямо в консоли:

set SSH_AGENT_PID=3044

Теперь, когда переменные среды (SSH_AUTH_SOCK и SSH_AGENT_PID) установлены для текущего сеанса консоли, запустите команду ssh-add, и она не сможет снова подключиться к агенту ssh.


2
Спасибо! Это было именно то, что мне было нужно.
Изохронный

6
Нет, все так же.
Джески

3
Эти шаги аналогичны выполнению 'eval $ (ssh-agent)'
K.Nicholas

2
Исправлено на моей Windows 10! Спасибо!
НТЛ

1
Это действительно помогло мне сохранить этот вопрос на Linux ... просто нужно заменить setнаexport
Greg Hor

30

Одна вещь, с которой я столкнулся, заключалась в том eval, что у меня не получалось использовать Cygwin, а у меня -ssh-agent ssh-add id_rsa .

После этого я столкнулся с проблемой, что мой закрытый ключ был слишком открытым, решение, которое мне удалось найти для этого ( отсюда ):

chgrp Users id_rsa

а также

chmod 600 id_rsa

наконец я смог использовать:

ssh-agent ssh-add id_rsa

Вы использовали eval `ssh-agent`, с обратными чертами `вокруг ssh-agent, как показано в моем ответе ? Это отлично сработало для меня в Cygwin. Похоже, вы правы, что ssh-agent ssh-addтакже работает, по крайней мере, в msysgit Bash. Однако обратите внимание, что id_rsaэто ключ по умолчанию, который используется, поэтому вам не нужно указывать его с помощью ssh-agent ssh-add id_rsa.

Я полагаю, что использовал обратные ходы, но для меня все еще нет игры в кости
Vnge

1
ОМГ, ВЫ РЕШИЛИ СВОИ РАБОТЫ. Спасибо!
Чи Лунг скоро

Этот ответ работал для меня в Bash.
Lsakurifaisu

27

Чтобы усилить ответ n3o для Windows 7 ...

Моя проблема заключалась в том, что некоторые обязательные переменные среды не были установлены, и n3o правильно, что ssh-agent говорит вам, как установить эти переменные среды, но на самом деле не устанавливает их.

Поскольку Windows не позволяет вам делать «eval», вот что нужно сделать вместо этого:

Перенаправить вывод ssh-agent в командный файл с

ssh-agent > temp.bat

Теперь используйте текстовый редактор, например Блокнот, для редактирования файла temp.bat. Для каждой из первых двух строк: - Вставьте слово «set» и пробел в начале строки. - Удалить первую точку с запятой и все, что следует.

Теперь удалите третью строку. Ваш temp.bat должен выглядеть примерно так:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

Запустите temp.bat. Это установит переменные окружения, необходимые для работы ssh-add.


К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

Я до сих пор получаю Could not open a connection to your authentication agent.при запуске ssh-add в Win10 PowerShell.
Кебман

19

Я только что получил это работает. Откройте свой ~/.ssh/configфайл.

Добавить следующее-

Host github.com
 IdentityFile ~/.ssh/github_rsa

На странице, которая дала мне подсказку « Настроить SSH для Git», говорилось, что отступ в одном пробеле важен ... хотя у меня была конфигурация от Heroku, которая не имела этого пространства и работает должным образом.


1
Это не помогает при вводе ключевой фразы для ключа SSH.
Alesch

1
Если вы не хотите вводить фразу-пароль, создайте ключ без него. Нет смысла иметь парольную фразу, если вы все равно собираетесь сохранить ее в своем скрипте.
Пол Бекотт

В этом весь смысл использования ssh-agent. Пароль к вашим ключам хранится в безопасной цепочке ключей, которая обрабатывается ssh-agent.
Alesch

Это лучший ответ для меня здесь. У него было много проблем с запуском ssh-agent тысячи раз в Windows 7, и эта ловушка уничтожения не сработала. Я не против, чтобы на моем персональном компьютере не было парольной фразы.
Fleshgrinder

18

Если вы будете следовать этим инструкциям, ваша проблема будет решена.

Если вы работаете на компьютере Mac или Linux, введите:

eval "$(ssh-agent -s)"

Если вы работаете на компьютере с Windows, введите:

ssh-agent -s

14

Для пользователей окон я обнаружил, что cmd eval `ssh-agent -s`не работает, но использование git bash помогло eval `ssh-agent -s`; ssh-add KEY_LOCATIONи убедился, что служба Windows «Управление ключами OpenSSH» не отключена


13

Позвольте мне предложить другое решение. Если вы только что установили Git 1.8.2.2 или около того и хотите включить SSH, следуйте хорошо написанным инструкциям .

Все до шага 5.6, где вы можете столкнуться с небольшим препятствием. Если агент SSH уже запущен, вы можете получить следующее сообщение об ошибке при перезапуске bash

Could not open a connection to your authentication agent

Если вы это сделаете, используйте следующую команду, чтобы увидеть, запущено ли более одного процесса ssh-agent.

ps aux | grep ssh

Если вы видите более одной службы ssh-agent, вам нужно будет убить все эти процессы. Используйте команду kill следующим образом (PID будет уникальным на вашем компьютере)

kill <PID>

Пример:

kill 1074

После удаления всех процессов ssh-agent запустите px aux | Снова выполните команду grep ssh, чтобы убедиться, что они исчезли, затем перезапустите Bash.

Вуаля, теперь вы должны получить что-то вроде этого:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

Теперь вы можете перейти к шагу 5.7 и далее.


заставил меня пройти контрольно-пропускной пункт, tyvm
Джейсон Фингар

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

К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

12

Примечание: это ответ на этот вопрос , который был объединен с этим. Этот вопрос был для Windows 7, то есть мой ответ был для Cygwin / MSYS / MSYS2. Это похоже на какой-то Unix, где я бы не ожидал, что с агентом SSH нужно будет управлять таким образом .

Это запустит агент SSH и выполнит аутентификацию только в первый раз, когда вам это нужно , а не каждый раз, когда вы открываете свой терминал Bash. Он может быть использован для любой программы, использующей SSH в целом, включая ssh и scp. Просто добавьте это к /etc/profile.d/ssh-helper.sh:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }

1
К вашему сведению: объединено со stackoverflow.com/questions/4083079/…
Shog9

2
Процесс ssh-agent, похоже, не связан с тем же терминалом, который использовался для его запуска. Я думаю, ps -A | grep ssh-agentили ps h -C ssh-agentдолжен быть использован вместоps | grep ssh-agent
Алексис

1
Использование дефиса в имени функции не рекомендуется. Я не знаю почему, но прочитайте это . Например, я обнаружил, что не echo ssh-auth | bashполучится.
Алексис

1
Вы можете просто это немного больше. Просто проверьте, работает ли он, и назначьте переменные env. А затем добавьте AddKeysToAgent yes(или используйте prompt) в свою конфигурационную запись ssh (используйте Host *для всех хостов). Таким образом, вам будет предложено ввести пароль SSH, только если вы на самом деле попытаетесь подключиться, в противном случае вас могут попросить ввести пароль для простого git diffили git status.
ST-DDT

2
$HOME/.sshможет быть более надежным, чем/home/$(whoami)/.ssh
Ари Свидлер

12

У меня была такая же проблема на Ubuntu и другие решения не помогли мне. Я наконец понял, в чем была моя проблема. Я создал sshключи в /root/.sshпапке, поэтому даже когда я запускался ssh-addс правами root, он не мог выполнять свою работу и продолжал говорить

Could not open a connection to your authentication agent.

Я создал мои открытые и закрытые ключи SSH в /home/myUsername/папке, и я использовал

ssh-agent /bin/sh

потом я побежал

ssh-add /home/myUsername/.ssh/id_rsa

и проблема была решена таким образом.

Примечание: для доступа к вашему репозиторию gitдобавьте свой пароль git при создании sshключей с помощью ssh-keygen -t rsa -C "your git email here".


9

При подключении к серверу используйте параметр -A, например:

ssh -A root@myhost

со страницы руководства:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

Что это делает и почему?
erikbwork

согласно странице man ... man ssh ... -A Включает переадресацию соединения агента аутентификации. Это также может быть указано для каждого хоста в файле конфигурации.
Скотт

8

Основное решение для запуска ssh-agentответили во многих ответах. Однако ssh-agentмногократное выполнение (для каждого открытого терминала или для удаленного входа в систему) создаст много копий, не ssh-agentзапущенных в памяти. Сценарии, которые предлагаются, чтобы избежать этой проблемы, являются длинными и требуют записи и / или копирования отдельного файла или необходимости записи слишком большого количества строк в ~/.profileили ~/.schrc. Позвольте мне предложить простое двухстрочное решение:

Для sh , bash и т.д .:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Для csh , tcsh и т.д .:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

Что здесь:

  • поиск процесса ssh-agentпо имени и по текущему пользователю
  • Создайте соответствующий файл сценария оболочки, вызвав ssh-agentи запустив ssh-agentсебя, если текущий пользовательский ssh-agentпроцесс не найден
  • оценить созданный сценарий оболочки, который настраивает соответствующую среду

Нет необходимости защищать созданный сценарий оболочки ~/.ssh-agent.tcshили ~/.ssh-agent.shдоступ других пользователей, потому что: сначала общение с ssh-agentобрабатывается через защищенный сокет, который недоступен для других пользователей, а во вторую очередь другие пользователи могут найти ssh-agentсокет простым путем перечисления файлов в /tmp/каталоге. Что касается доступа к ssh-agentпроцессу, то это одно и то же.



6

Прочитайте ответ @ cupcake для объяснений. Здесь я только пытаюсь автоматизировать исправление.

Если вы используете терминал Cygwin с BASH, добавьте следующее в файл $ HOME / .bashrc. Это только запускает ssh-agent один раз в первом терминале Bash и добавляет ключи к ssh-agent. (Не уверен, если это требуется в Linux)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

НЕ ЗАБЫВАЙТЕ добавить правильные ключи в команду «ssh-add».


5

У меня была эта проблема, когда я запускал ssh-agent, когда он уже работал. Смущается. Чтобы увидеть, если это так, используйте

eval $(ssh-agent)

чтобы увидеть, если это так же, как вы думали, это должно быть. В моем случае это было не то, что я только начал.

Чтобы дополнительно проверить, работает ли более одного ssh-агента, вы можете просмотреть:

ps -ef | grep ssh

2
Я думаю, что запуск eval $(ssh-agent)должен каждый раз создавать нового агента с другим PID, хотя я могу ошибаться.

4

У меня была похожая проблема, когда я пытался заставить это работать на Windows, чтобы соединиться с тайником через ssh

Вот решение, которое сработало для меня.

  1. Оказывается, я запустил Pageant ssh agent на своем компьютере с Windows - я бы проверил, что у вас работает. Я подозреваю, что это Pageant, так как он поставляется по умолчанию с Putty и winScp

  2. Ssh-add не работает из командной строки с этим типом агента

  3. Вам необходимо добавить закрытый ключ через окно пользовательского интерфейса Pageant, которое можно получить, дважды щелкнув значок Pageant на панели задач (после его запуска).

  4. Прежде чем добавить ключ в Pageant, необходимо преобразовать его в формат PPK. Полная инструкция доступна здесь Как конвертировать ключ SSH в формат ppk

  5. Вот и все. После того, как я загрузил свой ключ в хранилище, я смог использовать SourceTree для создания локального репо и клонирования удаленного.

Надеюсь это поможет...


3

Я исправил ошибку, принудительно остановив (убив) процессы git (агент ssh), затем удалив Git и снова установив Git.


2
Я подозреваю, что все, что вам нужно было сделать, это просто убить все существующие процессы агента, а затем перезапустить один, вместо того, чтобы переустанавливать Git.

3

Используя Git Bash на Win8.1E, мое разрешение было следующим:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

Почему необходимо выводить на /dev/null? Ваш ответ в основном делает то же самое, что и этот .

Кроме того, я хотел бы отметить, что ~/.ssh/id_rsaэто ключ по умолчанию, поэтому вам не нужно указывать ssh-add ~/.ssh/id_rsa, просто ssh-addдолжен работать.

Я попробовал ваше решение в этой же среде @Cupcake, оно не работает. Я тоже не понимаю, почему это ответ, но пока я не сделал это таким образом, он никогда не работал.
nighliber

3

Если вы используете Putty, возможно, вам нужно установить для параметра «Connection / SSH / Auth / Allow agent forwarding» значение «true».

введите описание изображения здесь


3

Это сработало для меня.

В окне CMD введите следующую команду:

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

Для bash, встроенного в Windows 10, я добавил это в .bash_profile:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
Я не знаю, почему вы вставляете так много текста, если бы просто сказали позвонить, $(ssh-agent -s)чтобы установить среду агента.
erikbwork

1
Это сработало для меня, когда я использовал его в первый раз. Но после перезагрузки системы проблема фактически усугубилась. С SSH не работает вообще больше. Не рекомендуется.
yspreen
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.