ssh-add narzeka: Nie można otworzyć połączenia z agentem uwierzytelniającym

151

Próbowałem zacząć ssh-addpracę nad RaspberryPi z systemem Raspbian.

Mogę rozpocząć ssh-agent, gdy to zrobię, daje następujące dane wyjściowe do terminala:

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

Jeśli uruchomię ps aux | grep ssh, zobaczę, że działa.

Następnie próbuję uruchomić ssh-add, aby dodać moje kluczowe hasło, i otrzymuję następujące informacje:

Could not open a connection to your authentication agent.

Jakieś pomysły?

Daniel Groves
źródło
6
Spróbujeval $(ssh-agent)
Ulrich Dangel

Odpowiedzi:

224

Twoja powłoka ma oceniać dane wyjściowe kodu powłoki za pomocą ssh-agent. Uruchom zamiast tego:

eval "$(ssh-agent)"

Lub jeśli już uruchomiłeś ssh-agent, skopiuj go i wklej do wiersza poleceń powłoki (zakładając, że używasz powłoki podobnej do Bourne'a).

sshpolecenia muszą wiedzieć, jak rozmawiać ssh-agent, wiedzą o tym ze SSH_AUTH_SOCKzmiennej środowiskowej.

Stéphane Chazelas
źródło
Dzięki, nie bardzo rozumiem, jak to działa. To bardzo mile widziane.
Daniel Groves,
2
Lub możesz wprowadzić ssh-agent bash, a po ssh-add zadziała
RaduM
@Stephane, czy mam pewność, że polecenie ssh-agent po prostu wypisuje wynik jego wykonania, podczas gdy wersja eval faktycznie wykonuje polecenie?
Denys S.,
5
@DenysS. Cóż, nie, wykonuje konfigurację, a następnie informuje powłokę, jak zaktualizować swoje środowisko, aby móc się z nim skontaktować. Nie może tego zrobić samodzielnie. Może uruchomić nową powłokę ze zaktualizowanym środowiskiem (tak właśnie ssh-agent bashdziała), ale nie może zaktualizować pamięci osobnego procesu uruchamiającego obce polecenie (już działająca powłoka).
Stéphane Chazelas
@StephaneChazelas, jeśli mój ssh-agent jest uruchamiany podczas startu, ale nadal muszę go ewaluować w mojej powłoce, czy to oznacza, że ​​nie jest on automatycznie oceniany dla każdej powłoki i musi być jakoś skonfigurowany przez użytkownika root?
Denys S.,
27

Spróbuj tego:

$ ssh-agent /bin/sh
$ ssh-add $yourkey
użytkownik48656
źródło
5
To faktycznie działało dla mnie, gdy żadna inna odpowiedź nie działała.
Joseph Snow
2
Jeśli używasz fishshell, ta odpowiedź działa. ssh-agent /usr/bin/fish.
slackmart
1
Pojawia
@slackmart Jeśli zainstalowałeś ryby w BSD, jego lokalizacja to /usr/local/bin/fish(alternatywnie /usr/ports/shells/fish). Podziękuj whereispoleceniu za pomoc w zrozumieniu tego.
cjm
Świetnie @cjm, używam Slackware Linux i taka ścieżka działa dla mnie.
slackmart
12

To pytanie zostało również bardzo dobrze omówione w Stackoverflow .

eval `ssh-agent -s`

ssh-add
xaa
źródło
Zapomniałeś cytatów `...`. Bez nich operator split + glob jest wywoływany na wyjściu.
Stéphane Chazelas,
6

Jeśli używasz csh jako powłoki ( FreeBSD PI ) może to działać:

eval `ssh-agent -c`

następnie wystarczy zrobić coś takiego:

ssh-add ~/.ssh/id_rsa
nbari
źródło
Pojawia
2

Możesz także użyć następującej składni:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'
kenorb
źródło
To nie działa dla mnie, jeśli pójdziesz ssh-agent sh -c "ssh-add -l", powie ci, że nie masz tożsamości.
Ain Tohvri,
Ponieważ musisz go najpierw dodać, na przykład: ssh-agent sh -c "ssh-add && ssh-add -l"wydrukuje twoją tożsamość.
kenorb
1

Spróbuj tego: przejdź do C:\$Installation_Folder$\Git\cmd i wykonaj:

start-ssh-agent 

Otworzy polecenie cmd i uruchomi się ssh-agentwe właściwy sposób.

ssh-add ~/.ssh/id_rsa powinien wtedy działać.

sab125
źródło
" Bash: start-ssh-agent: command not found "
IgorGanapolsky
1

Było to mylące i ma 2 możliwe dobre odpowiedzi, w zależności od tego, czy użytkownik próbuje dodać klucz ssh w systemie Linux lub Windows (tak jak ja). To prawdopodobnie nie odpowiada OP, ale stanowi rozszerzenie dla git-bash. Korzystam zarówno z systemu Windows, jak i Ubuntu w celu programowania, a moja instalacja git jest nieco inna w każdym z nich.

Spróbuj: przejdź do C: \ $ folder_instalacyjny $ \ Git \ cmd i wykonaj:

start-ssh-agent Otworzy polecenie cmd i uruchomi ssh-agent we właściwy sposób.

.. była dobrą odpowiedzią dla systemu Windows, ale nie udało się określić, że należy przejść przez Eksploratora Windows, aby znaleźć folder instalacyjny Git, i uruchomić powłokę systemu Windows, aby otworzyć się po zakończeniu kroku 1.
”przejdź do C: \ $ folder_instalacyjny $ \ Git \ cmd "

Krok 2: wystarczy dwukrotnie kliknąć

start-ssh-agent

W kroku 3 wróć do git-bash lub dowolnego emulatora terminali * nix, który uruchomisz, i uruchom ssh-add. Jeśli użyłeś domyślnej nazwy klucza publicznego ssh, nie musisz dodawać nazwy, ponieważ ssh-add korzysta z niej automatycznie.

Wolf Halton
źródło
1

Istnieje kilka sposobów na użycie tożsamości z sudo, np sudo npm install.

Długa droga , ale daje również dostęp do roota, więc nie będziesz musiał sudodużo zużywać .

  1. Uruchom
    sudo ssh-agent bash
    To poprosi o podanie hasła, a następnie uruchomi się ssh-agentz uprawnieniami administratora,
  2. Przejdź do folderu .ssh użytkowników
    cd /home/user/.ssh
  3. Stamtąd możesz biegać

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

Krótko mówiąc , tylko twój użytkownik (chyba że chcesz dużo sudo)

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
źródło
exporti evaldziała tak samo dobrze, jak root pod warunkiem, że powłoka logowania roota jest jak Bourne. Jeśli powłoka roota to csh lub tcsh, użyjeval `ssh-agent -c`
Stéphane Chazelas,
Pamiętaj, że możesz również dać rootdostęp do swojego agenta ssh, robiącsudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas
Próbowałem zarówno bash jest znowu skorupą i żadne z nich nie działało poprawnie. wszyscy użytkownicy mojej instancji debian jessie, w tym root, domyślnie używają bash.
Belldandu,
Co próbowałeś? eval "$(ssh-agent)"po zachęcie powłoki bash działającej jako root będzie działał. Oczywiście musisz uruchomić sshz tej powłoki lub jej potomka, aby odziedziczyli zmienną env var SSH_AUTH_SOCK. eval "$(sudo ssh-agent)"; sudo ssh...nie będzie działać, ponieważ sudodomyślnie nie przekazuje zmiennej env SSH_AUTH_SOCK.
Stéphane Chazelas,
próbowałem eval "$(ssh-agent)"źle patrzeć później, aby zobaczyć, czy jest jakiś błąd konfiguracji. Chociaż obecny sposób, w jaki podałem ten przewodnik, pozwala na swobodną kontrolę nad tym, kim chcesz być, ponieważ jesteś już rootem i może uzyskiwać dostęp do dowolnych użytkowników id_rsa na serwerze. Więc kiedy już zacznę działać prawidłowo, zredaguj moją odpowiedź.
Belldandu,