Не вдалося відкрити з'єднання з вашим агентом аутентифікації


1604

Я зіткнувся з цією помилкою:

$ 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- якщо у вас є, ви повинні усунути це налаштування, оскільки помічник не допомагає.
yoyo

Відповіді:


2382

Ви почали ssh-agent?

Можливо, вам доведеться почати ssh-agentперед запуском ssh-addкоманди:

eval `ssh-agent -s`
ssh-add

Зауважте, що це запустить агент для msysgit Bash в Windows . Якщо ви використовуєте іншу оболонку або операційну систему, можливо, вам буде потрібно використовувати варіант команди, наприклад, вказаний в інших відповідях .

Дивіться наступні відповіді:

  1. ssh-add скарги: Не вдалося відкрити з'єднання з вашим агентом аутентифікації
  2. Git push вимагає імені користувача та пароля (містить докладні інструкції щодо використання ssh-агента)
  3. Як запустити (git / ssh) агент аутентифікації? .
  4. Не вдалося відкрити з'єднання з вашим агентом аутентифікації

Щоб автоматично запустити ssh-агент і дозволити одному екземпляру працювати в кількох вікнах консолі, див. Запуск ssh-агента при вході .

Чому нам потрібно використовувати evalзамість просто ssh-agent?

Щоб дізнатися чому, дивіться відповідь Робіна Гріна .

Паблік проти приватних ключів

Крім того, коли я використовую ssh-add, я завжди додаю до нього приватні ключі. Файл ~/.ssh/id_rsa.pubвиглядає як відкритий ключ, я не впевнений, що це спрацює. У вас є ~/.ssh/id_rsaфайл? Якщо ви відкриєте його в текстовому редакторі, це каже, що це приватний ключ?


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

5
Ти занадто добрий кекс. Ви абсолютно праві. Моє ліжко. екс тут ; ssh-add додає приватний ключ для користувача ssh-агент (запущений процес) може діяти від імені клієнта / хоста, якщо сервер приймає ключі rsa. Гез. Я не знаю, що мене так схвилювало.
xtian

21
Мені цікаво, чому eval ssh-agent -sпрацює, але ssh-agentсамостійно - ні.
DanielM

12
@DanielM: Для використання ssh-агента SSH потрібні дві речі: екземпляр ssh-агента, що працює у фоновому режимі, і набір змінної середовища, який повідомляє SSH, який сокет він повинен використовувати для підключення до агента ( SSH_AUTH_SOCKIIRC). Якщо ви просто запустите, ssh-agentагент запуститься, але SSH не матиме уявлення, де його знайти.
Ванесса Фіппс,

4
Дякуємо, що відповіли. Я щойно помітив, що ви використовували зворотну цитату в команді. Я настільки розгублений, чому backquote (`) працює на команду eval, але не одинарна / подвійна цитата (',') на моїй баш-оболонці?
Weishi Zeng

539

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

eval $(ssh-agent)

Більше інформації на сайті: https://coderwall.com/p/rdi_wq


14
Працював і в Windows 8.
Андреас Рудольф

Я також використовую Windows 7 та Git Bash, і моя відповідь працює чудово. Це здорово, що ви можете зробити це і таким чином.

2
Чудово !! Працював і з вікнами 10.
NitinM

1
Працював над Манджаро
code_flow

1
$ eval "$ (ssh-agent -s)" працював на мене в Windows 10
Ендрю Андерсон

261

Наступна команда працювала для мене. Я використовую CentOS.

exec ssh-agent bash

3
Дякую, це працювало для мене, я запустив 'exec ssh-agent zsh' для своєї оболонки.
jasonmcclurg

2
Відповідно до цієї видаленої "відповіді" , вона працює і на Amazon Linux AMI. Я думаю, що це рішення Unix / Linux / * nix.

4
Я ssh'ed в докер-контейнер і ssh-add my.id_rsaна мене провалиться. Але exec ssh-agent zshдав середовище, де я міг ssh-addбез проблем. І я всередині свого докерного контейнера :)
markuz-gj

Хтось може, будь ласка, коротко пояснити, у чому проблема могла бути? Дякую :) Це працювало і на моєму Ubuntu 14.04.
harkirat1892

також працював над raspbian
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-агент буде вбитий.)

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
Коли я це роблю, eval `ssh-agent -s`процес не припиняється, коли я виходжу з cygwin.
Кирило

Чи є спосіб налаштування конфігурації для Windows / gitbash, щоб не потрібно було робити це кожного разу?
mix3d

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

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. Я зараз використовую псевдонім, дивіться оновлену відповідь, як це зробити.
Кріс Сноу


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

1
Ви, сер, ви чудові. Дякую. ** Я зіткнулася з тією ж проблемою при клонуванні Bitbucket репо, я вже налаштований ключ SSH, але продовжував отримувати помилку: fatal: Could not read from remote repository..
Нішант Годке

Працював для мене на Windows 10 і встановив git bash
desmond13

116

Я зіткнувся з тією ж проблемою для Linux, і ось що я зробив:

В основному команда ssh-agent запускає агент, але він насправді не встановлює змінні середовища для його запуску. Він просто виводить ці змінні в оболонку.

Тобі потрібно:

eval `ssh-agent`

а потім зробіть ssh-add. Див. Не вдалося відкрити з'єднання з вашим агентом аутентифікації .



Працював і для мене, маючи проблеми з використанням boot2docker в Windows.
Веве

Це було для мене.
Том

115

ssh-add та ssh (якщо припустимо, що ви використовуєте opensh реалізації) потребують змінної середовища, щоб знати, як спілкуватися з агентом ssh. Якщо ви запустили агент у іншому вікні командного рядка до того, яке ви використовуєте зараз, або якщо ви запустили його неправильно, ні ssh-add, ні ssh не побачать набір змінної середовища (тому що змінна середовища встановлена локально для команди підкажіть, що це встановлено).

Ви не кажете, яку версію ssh ви використовуєте, але якщо ви використовуєте cygwin, ви можете використовувати цей рецепт від SSH Agent на 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

Це запустить агент автоматично для кожного нового вікна командного рядка, яке ви відкриєте (що є неоптимальним, якщо ви відкриєте кілька командних підказок за один сеанс, але принаймні це повинно працювати).



9
Мене тут пов’язали з іншого питання SO. Чи можу я запитати, чому потрібно додати це до файлу конфігурації Bash? На моїй машині все, що мені потрібно зробити, це запустити, eval $(ssh-agent)і я можу використовувати ssh без пароля для кожного нового вікна терміналу.
Енді J

Це не може бути можливим, якщо ви не запускаєте нові термінали з цього терміналу.
Робін Грін

113

Біжи

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 build 1809 та git 2.21.0)
Alfabravo

Я використовую ZSH, і це працює для мене:ssh-agent zsh; ssh-add
sirboderafael

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)як у відповіді Чечоро тут.
Frug

6
+1 У мене була така ж проблема, як у OP (Windows 7), і це єдине рішення, яке працювало на мене.
Weblurk


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 агент).
    $ ps aux | grep ssh
  4. (Необов’язково) Якщо на етапі 3 їх знайдено, вбийте їх
    $ kill <pids>
  5. Запустив ssh агент
    $ eval `ssh-agent -s`
  6. До ssh-агента додано ключ ssh, сформований на кроці 2
    $ ssh-add ~/.ssh/id_rsa

3
'eval' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл.
Chutipong Roobklom

Ви можете просто перезапустити агент eval ssh-agent -sта додати старший ключ за допомогою ssh-add ~ / .ssh / id_rsa. Якщо ви генеруєте новий ключ SSH, вам потрібно буде оновити цей ключ у всіх своїх службах, таких як github, bitbucket тощо.
Mohit

Чи є спосіб змусити це пережити перезавантаження Windows? Після перезавантаження він не працює, поки я знову не запустя "eval ssh-agent -s" і "ssh-add ~ / .ssh / id_rsa".
Міхал Вікіан

1
після довгого пошуку, це рішення, яке спрацювало
Sujit.Warrier

Велике пояснення!
avivamg

56

У Windows 10 я спробував усі перераховані тут відповіді, але жодна з них, здається, не спрацювала. Насправді вони дають підказку. Щоб вирішити проблему, вам просто потрібно 3 команди. Ідея цієї проблеми полягає в тому, що ssh-add потребує змінних середовищ SSH_AUTH_SOCK та SSH_AGENT_PID, щоб встановити поточний шлях до файлу шкарпетки ssh-агента та номер pid.

ssh-agent -s > temp.txt

Це збереже висновок ssh-агента у файлі. Вміст текстового файлу буде приблизно таким:

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
Ні, все одно.
Jaskey

3
Ці кроки такі ж, як робити "eval $ (ssh-agent)"
K.Nicholas

2
Виправлено на моїй Windows 10! Дякую!
ntl

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
OMG ВИ РОШУЄМО МОЄ ПІСЛЯ ФУРЗАЦІЇ. Дякую!
Chee Loong незабаром

Ця відповідь спрацювала для мене в баш.
Lsakurifaisu

27

Для посилення відповіді n3o для Windows 7 ...

Моя проблема справді полягала в тому, що деякі необхідні змінні середовища не були встановлені, і n3o вірно, що ssh-агент підказує вам, як встановити ці змінні середовища, але насправді їх не встановлює.

Оскільки Windows не дозволяє вам робити "eval", ось що робити замість цього:

Перенаправити вихід ssh-агента на пакетний файл з

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.



Я все одно отримую 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.
алеш

1
Якщо ви не хочете вводити пароль, створіть ключ без нього. Немає сенсу мати фразу, якщо ви все одно збираєтесь зберігати її у своєму сценарії.
Пол Бекотт

У цьому вся суть використання ssh-агента. Пароль на ваші ключі зберігається в захищеному брелоку, яким обробляє ssh-agent.
алеш

Це найкраща відповідь для мене тут. Було багато проблем із тим, що ssh-агент запускався тисячі разів у Windows 7, і що вбиває пастку, це не зробило жодної проблеми. Я не проти того, що вдома вдома немає персонального комп'ютера.
Fleshgrinder

18

Якщо дотримуватися цих інструкцій, ваша проблема буде вирішена.

Якщо ви працюєте на комп'ютері Mac чи Linux, введіть:

eval "$(ssh-agent -s)"

Якщо ви працюєте на машині Windows, введіть:

ssh-agent -s

13

Дозвольте запропонувати інше рішення. Якщо ви тільки що встановили Git 1.8.2.2 або після цього, і хочете включити SSH, дотримуйтесь добре написаних інструкцій .

Все до кроку 5.6, де ви можете зіткнутися з невеликим забиттям. Якщо агент SSH вже запущений, ви можете отримати таке повідомлення про помилку при перезапуску bash

Could not open a connection to your authentication agent

Якщо ви це зробите, скористайтеся наступною командою, щоб побачити, чи запущено більше одного ssh-агента

ps aux | grep ssh

Якщо ви бачите більше однієї служби ssh-агента, вам потрібно буде вбити всі ці процеси. Використовуйте команду kill наступним чином (PID буде унікальним на вашому комп’ютері)

kill <PID>

Приклад:

kill 1074

Після того, як ви видалили всі процеси ssh-агента, запустіть px aux | команда grep ssh знову, щоб переконатися, що їх немає, а потім перезапустіть Bash.

Вуаля, тепер ти повинен отримати щось подібне:

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

Тепер ви можете продовжити крок 5.7 і пізніше.


мене пропустили блокпост, тивм
Джейсон Фінгар

Просто хотів додати, що в моєму випадку один із перелічених пунктів - це процес grep, з яким ми робимо пошук, але він вже вбивається після його виконання. Жоден каламбур не призначений.
Райан Мортенсен


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 "$@"; }


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

1
Використовувати дефіс у назві функції, можливо, не рекомендується. Я не знаю чому, але прочитайте це . Наприклад, я виявив, що echo ssh-auth | bashне вдасться.
alexis

1
Ви можете просто трохи змінити це. Просто перевірте, чи працює він, і призначте env змінним. А потім додайте AddKeysToAgent yes(або використовуйте prompt) до свого запису ssh config (використовуйте 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".


11

Для користувачів вікон я виявив, що cmd eval `ssh-agent -s`не працює, але, використовуючи git bash, працювали частування eval `ssh-agent -s`; ssh-add KEY_LOCATION, і переконавшись, що служба Windows "Керування ключами OpenSSH" не була відключена


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. Дозвольте запропонувати просте дворядкове рішення:

Для ш , баш тощо:

# ~/.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

Прочитайте відповідь @ кекс для пояснень. Тут я лише намагаюся автоматизувати виправлення.

Якщо ви використовуєте термінал Cygwin з BASH, додайте наступне у файл $ HOME / .bashrc. Це запускає ssh-агент лише один раз у першому терміналі Bash і додає ключі до ssh-агента. (Не впевнений, чи потрібно це в 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-агент, коли він вже працював. Заплутався. Щоб побачити, чи це так, скористайтеся

eval $(ssh-agent)

щоб побачити, чи це те саме, що ви думали, що має бути. У моєму випадку це було інакше, ніж те, що я тільки почав.

Щоб додатково перевірити, чи працює у вас більше одного ssh-агента, ви можете переглянути:

ps -ef | grep ssh

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

4

У мене була схожа проблема, коли я намагався змусити це працювати в Windows, щоб підключитися до скринінгу через ssh

Ось рішення, яке працювало на мене.

  1. Виявляється, я запускав агент Pageant ssh на своєму вікні Windows - я би перевірив, що ви працюєте. Я підозрюю, що це Pageant, оскільки він використовується за замовчуванням у Putty та winScp

  2. Ssh-add не працює з командного рядка з цим типом агента

  3. Вам потрібно додати приватний ключ через вікно користувальницького інтерфейсу, яке можна отримати, сумніваючись на піктограмі 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, можливо, вам потрібно встановити параметр "З'єднання / SSH / Auth / Дозволити переадресацію агента" на "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.