Jak ssh do zdalnego serwera za pomocą klucza prywatnego?

77

Mam dwa serwery. Oba serwery są w CentOS 5.6. Chcę SSH z serwera 1 na serwer 2 za pomocą klucza prywatnego, który mam (klucz prywatny OpenSSH SSH-2).

Nie wiem jak to zrobić na Uniksie. Ale to, co zrobiłem w systemie Windows za pomocą Putty, to nakarmienie mojego klucza prywatnego OpenSSH do putty-gen i wygenerowanie klucza prywatnego w formacie PPK.

Jednak tworzyłbym skrypt bash z serwera 1, który wykona niektóre polecenia na serwerze 2 za pośrednictwem SSH.

Jak połączyć SSH z serwerem 2 za pomocą mojego pliku klucza prywatnego z serwera 1?

Aivan Monceller
źródło
1
Na wielu systemach Linux i Unix można to zrobić za pomocąssh-copy-id user@machine
Paul Tomblin,

Odpowiedzi:

66

Potrzebujesz klucza publicznego SSH i klucza prywatnego ssh. Klucze można generować za pomocą ssh_keygen. Klucz prywatny musi być przechowywany na serwerze 1, a klucz publiczny musi być przechowywany na serwerze 2.

Jest to całkowicie opisane na stronie manuala openssh, więc zacytuję go dużo. Powinieneś przeczytać sekcję „Uwierzytelnianie”. Bardzo pomocny powinien być również podręcznik openSSH: http://www.openssh.org/manual.html

Uważaj na ssh, ponieważ wpływa to na bezpieczeństwo twojego serwera.

Od man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Oznacza to, że możesz przechowywać swój klucz prywatny w katalogu domowym w .ssh. Inną możliwością jest poinformowanie ssh za pomocą -iprzełącznika parametrów, aby używał specjalnego pliku tożsamości. Również z man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

To jest dla klucza prywatnego. Teraz musisz wprowadzić swój klucz publiczny na serwerze 2. Ponownie cytat z man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

Najłatwiejszym sposobem na osiągnięcie tego jest skopiowanie pliku na Serwer 2 i dołączenie go do pliku uprawnione_ klucze:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

Autoryzacja za pomocą klucza publicznego musi być dozwolona dla demona ssh, patrz man ssh_config. Zwykle można to zrobić, dodając następującą instrukcję do pliku konfiguracyjnego:

PubkeyAuthentication yes
echox
źródło
10
Cześć, dziękuję za wysiłek, ale potrzebuję tylko tego. ssh -i keyfiledzięki!
Aivan Monceller,
8
Po wygenerowaniu klucza, najprostszy i zalecany sposób, aby zainstalować go na serwerze jest z ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles
5
To ciekawe, jak wszyscy zapomnieli wspomnieć, że musisz uruchomić ssh-addpo utworzeniu klucza na komputerze, z którego się łączysz. to powoduje ból głowy u większości ludzi.
Luka,
3
WAŻNA UWAGA: Klient może mieć wiele kluczy prywatnych i wybierać je na podstawie dowolnej nazwy w swoim prywatnym pliku ~ / .ssh / config, gdzie Host = podaje dowolną nazwę, HostName podaje nazwę lub adres IP, Port = port docelowy, Użytkownik jest docelową nazwą użytkownika, a ItentityFile = wskazuje plik klucza prywatnego. Ten zestaw funkcji jest często pomijany i jest rozwiązaniem wielu problemów konfiguracyjnych, takich jak posiadanie wielu par kluczy, które w przeciwnym razie kolidują w przestrzeni nazw.
Richard T
1
Gdy próbuję połączyć się z SSH za pomocą, pojawia $ ssh -i ~/.ssh/id_rsa [email protected]się błąd. [email protected]: Permission denied (publickey).Mam klucz utworzony, dodany lokalnie za pomocą ssh-addi dodany jako autoryzowany klucz na zdalnym serwerze.
Aaron Franke
21

Użyłem ssh z opcją -i, aby dodać swój klucz tutaj.

Jeśli chcesz przekazać arg1, arg2 z plikiem .sh, po prostu przekaż go po pliku .sh i użyj spacji, aby go rozdzielić.

ssh -i home/avr/new.pem [email protected] "/var/www/beta/betatolive.sh mmin 30"

Avinash Raut
źródło
1
Nie zapomnij ustawić odpowiednich uprawnień:chmod 600 home/avr/new.pem
Brian Haak
16

Pierwszą rzeczą, którą musisz zrobić, to upewnić się, że uruchomiłeś polecenie keygen, aby wygenerować klucze:

ssh-keygen -t rsa

Następnie użyj tego polecenia, aby przekazać klucz do zdalnego serwera, modyfikując go tak, aby pasował do nazwy twojego serwera.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
Anubhav Singh
źródło
6
nazwijmy ssh-copy-id user@hostnamezamiast
Andrej
7

Dołącz klucz publiczny ( id_[rd]sa.pub) dla komputera źródłowego (z którego korzystasz ~/.ssh/authorized_keysssh ) do pliku serwera docelowego dla nazwy użytkownika, na którą chcesz ssh. Jeśli zgubiłeś klucz publiczny, będziesz chciał utworzyć nowy za pomocą ssh-keygen. Użycie domyślnych argumentów w tym celu powinno być w większości przypadków odpowiednie. Jeśli potrzebujesz bardziej szczegółowych instrukcji, w Google możesz znaleźć tysiące samouczków.

Kevin
źródło
4

ssh-copy-id - użyj lokalnie dostępnych kluczy do autoryzacji logowania na zdalnym komputerze

Użyj ssh-copy-idna serwerze 1, zakładając, że masz parę kluczy (wygenerowanych z ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

Teraz powinieneś mieć możliwość ssh do serwera 2 z ssh za pomocą klucza prywatnego

ssh -i ~/.ssh/id_rsa user@server2_hostname

Rzeczywiście, jeśli sprawdzisz cat ~/.ssh/authorized_keysna serwerze 2, zobaczysz, że klucz publiczny jest do ciebie dołączony.

Sida Zhou
źródło