Skopiować klucz ssh na inną maszynę, aby móc korzystać z GitHub?


12

Mam zdalny serwer. Mogę już pomyślnie ssh na tym zdalnym serwerze - mój klucz znajduje authorized_keyssię na zdalnym serwerze.

Teraz chcę pobrać z GitHub bezpośrednio na ten zdalny serwer. Ale dostaję, permission denied (publickey)kiedy próbuję ssh -T git@github.comna zdalnym serwerze.

Czy powinienem kopiować id_rsa.pubbezpośrednio z mojego komputera lokalnego na zdalny serwer, czy jest to niebezpieczne?

Jeśli to jest odpowiedź, jaki jest najlepszy sposób, aby to zrobić?

Czy powinienem wygenerować nowy klucz publiczny na zdalnym serwerze i dodać go do mojego konta github?

AKTUALIZACJA:

Oto wynik pełnego ssh:

~$ ssh -Tv git@github.com
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to github.com [192.30.252.131] port 22.
debug1: Connection established.
debug1: identity file /home/richard/.ssh/id_rsa type -1
debug1: identity file /home/richard/.ssh/id_rsa-cert type -1
debug1: identity file /home/richard/.ssh/id_dsa type -1
debug1: identity file /home/richard/.ssh/id_dsa-cert type -1
debug1: identity file /home/richard/.ssh/id_ecdsa type -1
debug1: identity file /home/richard/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/richard/.ssh/known_hosts:1
debug1: ssh_rsa_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
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

Właśnie próbowałem skonfigurować przekazywanie agentów ssh, używając adresu IP mojego serwera: developer.github.com/guides/using-ssh-agent-forwarding Ale wciąż dostaję Permission denied (publickey)się na zdalną maszynę.
Richard

1
w poleceniu ssh dostępna jest pełna opcja, myślę, że może ci powiedzieć, które pliki kluczy faktycznie próbuje, pomogło mi to kilka razy.
Allman

Odpowiedzi:


4

id_rsa.pubmogą być kopiowane w dowolnym miejscu, bez realnego zagrożenia dla niego. To jest twój klucz publiczny i jest przeznaczony do takich rzeczy. Jest to połowa klucza, a udostępnianie go w miejscach, do których chcesz uzyskać dostęp, jest sposobem, w jaki pozwalasz na działanie klucza prywatnego.

Aby umożliwić zdalne logowanie, klucz publiczny musi znajdować się na liście authorized_keys( authorized_keys2w niektórych systemach). Jeden klucz w każdym wierszu, w tym formacie:

ssh-rsa AAAIHAVEREMOVEDTHEMAJORITYOFTHEKEYBECAUSEISEENONEEDTOPOSTTHATWALLOFTEXTHERE9yfRjxw== jarmund@jarmint

Aby to osiągnąć, po skopiowaniu wystarczy dołączyć go do authorized_keyspliku w następujący sposób:cat id_rsa.pub >> ~/.ssh/authorized_keys

Większość zdrowych systemów tchórzliwie odmawia zezwolenia na używanie logowania opartego na kluczach, jeśli .sshfolder ma zbyt luźne uprawnienia. Folder powinien być 700, więc jeśli nadal masz problemy:chmod 700 ~/.ssh

Ponadto pliki w .sshfolderze powinny mieć 600:chmod 600 ~/.ssh


Edycja 1:

Sam plik nie id_rsa.pubjest wymagany na zdalnym serwerze. Tylko zawartość, jako część authorized_keys. Polecam uruchomić, ssh -vT git@github.comaby włączyć pełne rejestrowanie, abyś mógł dokładnie zobaczyć, na jakie uprawnienia narzeka.

Edycja 2:

Oznacza to, że żaden z oferowanych kluczy nie pasuje do tego, co ma zdalny serwer w pliku. To, co chcesz zobaczyć, to coś takiego:

debug1: Offering RSA public key: /home/jarmund/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535

Rzeczy do sprawdzenia:

  • Upewnij się, że jeden z kluczy prywatnych odpowiada kluczowi publicznemu dodanemu do pilota authorized_keys
  • Upewnij się, że klucz pasuje do nazwy użytkownika, za pomocą którego próbujesz się zalogować (powinna to być ostatnia część klucza publicznego)
  • Spróbuj zmienić nazwę authorized_keysnaauthorized_keys2

Dzięki. Mój klucz publiczny znajduje się ~/.ssh/authorized_keysna zdalnym serwerze - dodałem go za pomocą cat ~/.ssh/id_rsa.pub | ssh me@server "cat >> ~/.ssh/authorized_keys". Następnie sshed na pilocie i pobiegł ~$ chmod 700 ~/.ssh i $ chmod 600 ~/.ssh/authorized_keysale wciąż Permission denied (publickey)przy próbie ssh do github. Czy powinienem również skopiować cały id_rsa.pubplik na komputer zdalny?
Richard

@ Richard Nie potrzebujesz tam samego pliku, nie. Chociaż lubię przechowywać go w folderze .ssh na wszelki wypadek. Ale to nie jest wymagane, to po prostu coś, co robię. Polecam uruchomienie sshpolecenia opisanego w pytaniu z -vprzełącznikiem, aby zobaczyć dokładnie, na jakie uprawnienia narzeka ssh.
Jarmund

Dzięki za edycję 2. Nie jestem pewien, jak zrobić pierwszy punkt - check that one of the private keys...- co powinienem tutaj zrobić?
Richard

Czy w punkcie 2 masz na myśli, że klucz powinien pasować do mojej nazwy użytkownika GitHub? Nie wygląda to tak :)
Richard

Chodzi o to, że mogę używać tego samego klucza publicznego do ssh i ściągania z GitHub z mojego komputera lokalnego, więc GitHub musi myśleć, że jest w porządku ...?
Richard

2
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

Według twojego śladu debugowania, żaden z tych plików kluczy nie istnieje w systemie lokalnym, a ssh nie zaoferował żadnych kluczy do zdalnego serwera. Upewnij się, że klucz, którego chcesz użyć, faktycznie istnieje na hoście, na którym działa ssh, i że plik ma poprawną nazwę. Jeśli chcesz użyć pliku klucza innego niż jeden z plików domyślnych, musisz podać go w wierszu polecenia ssh:

ssh -i /path/to/some_key -Tv git@github.com

Plik klucza nie istnieje na zdalnym serwerze, z którego próbuję ssh na github, ale jest w nim authorized_keys. Czy to wystarczy, czy też muszę tam skopiować plik klucza?
Richard

1
authorized_keysdotyczy kluczy publicznych , które będą akceptowane dla połączeń przychodzących . Potrzebujesz kopii pliku klucza prywatnego , aby nawiązać połączenie wychodzące z innym hostem. Więc tak, jeden z tych kluczowych plików (id_rsa itp.) Musi być obecny na hoście, na którym działa ssh.
Kenster,

Flaga -i pomogła mi rozwiązać problem! Skopiowałem folder ssh na inny komputer i próbowałem użyć zdalnego git, ale został odrzucony. -I uratował dzień!
pauljohn32

2

Serwer potrzebuje twojego klucza prywatnego do uwierzytelnienia w Github. Twój klucz publiczny, jak sugeruje jego nazwa, jest uważany za publiczny, więc nie może wystarczyć do uwierzytelnienia.

Jeśli nie musisz używać Github na zdalnym serwerze bez połączenia przez ssh, powinieneś użyć przekazywania ssh-agent. Przewodnik po tym jest dostępny na Github: https://developer.github.com/guides/using-ssh-agent-forwarding/ .

W przeciwnym razie należy wygenerować nowy klucz i połączyć go ze swoim kontem.


0

Możesz bezpośrednio wpisać polecenie.

$ cat ~ / .ssh / id_rsa.pub

jeśli masz już klucz ssh, pokaże go. W przeciwnym razie daje błąd. Musisz dodać nowy klucz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.