Dlaczego przekazywanie agentów SSH nie działa?

57

Na moim komputerze z systemem MacOSX mam to w ~ / .ssh / config

Host *
ForwardAgent yes
Host b1
ForwardAgent yes

b1 to maszyna wirtualna z systemem Ubuntu 12.04. Przesyłam to w następujący sposób:

ssh pupeno@b1

i jestem zalogowany bez pytania o hasło, ponieważ już skopiowałem swój klucz publiczny. Ze względu na przekazywanie, powinienem być w stanie ssh do pupeno @ b1 z b1 i powinien on działać bez pytania o hasło, ale nie działa. Prosi mnie o hasło.

czego mi brakuje?

To jest pełne wyjście drugiego ssh:

pupeno@b1:~$ ssh -v pupeno@b1
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to b1 [127.0.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/pupeno/.ssh/id_rsa type -1
debug1: identity file /home/pupeno/.ssh/id_rsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_dsa type -1
debug1: identity file /home/pupeno/.ssh/id_dsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 35:c0:7f:24:43:06:df:a0:bc:a7:34:4b:da:ff:66:eb
debug1: Host 'b1' is known and matches the ECDSA host key.
debug1: Found key in /home/pupeno/.ssh/known_hosts:1
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pupeno/.ssh/id_rsa
debug1: Trying private key: /home/pupeno/.ssh/id_dsa
debug1: Trying private key: /home/pupeno/.ssh/id_ecdsa
debug1: Next authentication method: password
pupeno@b1's password:
pupeno
źródło

Odpowiedzi:

94

Okazuje się, że mojego klucza nie było w agencie, a to naprawiło:

OS X :

ssh-add -K

Linux / Unix :

ssh-add -k

Możesz wyświetlić listę załadowanych kluczy, używając:

ssh-add -l

ssh-add -L # for more detail
pupeno
źródło
5
Uwaga: ssh-add -Kdotyczy tylko OS X.
Roger Lipscombe,
Czy musisz to robić przy każdym ponownym uruchomieniu?
Krauser
8
  1. Sprawdź, czy twoje ./ssh/id_rsa .ssh/id_dsa .ssh/id_ecdsapliki mają odpowiednie uprawnienia, które powinny być własnością użytkownika i być chmoded 600.

  2. Sprawdź, czy masz poprawny klucz publiczny pupeno/.ssh/authorized_keysna b1 i sprawdź, czy authorized_keysma przerwanie linii na końcu klucza.

  3. Sprawdź, czy masz uruchomionego agenta ssh, spróbuj załadować klucze przez ssh-add

  4. Wypróbuj uwierzytelnianie i przekazywanie oparte na GSSAPI ssh -K

Daniel Prata Almeida
źródło
Zezwolenie na klucze są w porządku, a klucz w uprawnionych kluczach jest w porządku (w przeciwnym razie myślę, że miałbym problemy z połączeniem w pierwszej kolejności).
pupeno
Czy masz uruchomionego agenta ssh? Co się stanie, gdy zrobisz ssh-add, a następnie ssh -A pupeno @ b1, a następnie ssh pupeno @ b1?
Daniel Prata Almeida
Dlaczego nie zaktualizujesz odpowiedzi, aby wspomnieć o ssh-add -K, a ja zaakceptuję twoją zamiast mojej (ponieważ informacje zostały opublikowane prawie jednocześnie).
pupeno
6

Miałem problem z odrzuceniem przez serwer sshd żądania przekazania agenta z powodu braku miejsca w / tmp. Stało się tak, ponieważ sshd musi utworzyć gniazdo w / tmp. Czyszczenie dysku rozwiązało mój problem.

ssh -v powiedział wtedy:

debug1: Remote: Agent forwarding disabled: mkdtemp() failed: No space left on device
BartBiczBoży
źródło
1
Miałem ten sam problem, tylko uprawnienia były nieprawidłowe na / tmp. DZIĘKI!!
Nevyn
6

Innym możliwym powodem jest udostępnianie połączenia: jeden może być już zalogowany na drugim hoście bez przekazywania agenta i udostępniania połączenia. Drugie logowanie za pomocą ssh -A(lub równoważnie określonego w pliku konfiguracyjnym) za pośrednictwem połączenia współużytkowanego po cichu zignoruje -Aflagę. Przekazywanie agentów będzie działać dopiero po całkowitym wylogowaniu lub wyłączeniu udostępniania połączenia dla drugiego logowania.

W.Mann
źródło
2

Z korzyścią dla innych pracowników Google, którzy również doszli do tego pytania:

Niepoprawne białe znaki w pliku ~ / .ssh / config mogą również powodować drapanie głowy.

Niedawno pomogłem jednemu z moich współpracowników, który miał to:

# incorrect
host foobar ForwardAgent yes

zamiast tego:

# correct
host foobar
  ForwardAgent yes

Natknąłem się również na przypadki, w których brakujące wcięcia dyrektyw na liście hostów wpłynęły na funkcjonalność, nawet jeśli nie powinno.

Dale Anderson
źródło
0

Dodaj następujące wiersze do pliku .ssh / config

  Host **Server_Address**
     ForwardAgent yes

Dodaj klucz do agenta SSH

 ssh-add -K

Połącz ze zdalnym serwerem

ssh -v **username**@**Server_Address**

Uruchom test połączenia z GitHub

ssh -T [email protected]

Uruchom zdalny test ls na docelowym repozytorium git

git ls-remote --heads [email protected]:**account**/**repo**.git
Tahsin Turkoz
źródło