Bagaimana cara ssh ke server jauh menggunakan kunci pribadi?

77

Saya punya dua server. Kedua server berada di CentOS 5.6. Saya ingin SSH dari Server 1 ke Server 2 menggunakan kunci pribadi yang saya miliki (OpenSSH SSH-2 Private Key).

Saya tidak tahu bagaimana melakukannya di unix. Tapi yang saya lakukan di windows menggunakan Putty adalah memberi makan kunci privat OpenSSH saya ke putty-gen dan menghasilkan kunci pribadi dalam format PPK.

Namun, saya akan membuat skrip bash dari server 1 yang akan menjalankan beberapa perintah di server 2 melalui SSH.

Bagaimana cara SSH ke Server 2 menggunakan file kunci pribadi saya dari Server 1?

Aivan Monceller
sumber
1
Pada banyak sistem Linux dan Unix, ini dapat dilakukan menggunakanssh-copy-id user@machine
Paul Tomblin

Jawaban:

66

Anda memerlukan kunci publik SSH Anda dan Anda akan memerlukan kunci pribadi ssh Anda. Kunci dapat dibuat dengan ssh_keygen. Kunci pribadi harus disimpan di Server 1 dan kunci publik harus disimpan di Server 2.

Ini sepenuhnya dijelaskan dalam halaman openssh, jadi saya akan mengutip banyak dari itu. Anda harus membaca bagian 'Otentikasi'. Manual openSSH juga harus sangat membantu: http://www.openssh.org/manual.html

Harap berhati-hati dengan ssh karena ini memengaruhi keamanan server Anda.

Dari 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.

Ini berarti Anda dapat menyimpan kunci pribadi Anda di direktori home di .ssh. Kemungkinan lain adalah memberi tahu ssh melalui -isakelar parameter untuk menggunakan file identitas khusus. Juga dari 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).

Ini untuk kunci pribadi. Sekarang Anda perlu memperkenalkan kunci publik Anda di Server 2. Sekali lagi kutipan dari 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.

Cara termudah untuk mencapainya adalah dengan menyalin file ke Server 2 dan menambahkannya ke file Authorized_key:

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

Otorisasi melalui kunci publik harus diizinkan untuk daemon ssh, lihat man ssh_config. Biasanya ini dapat dilakukan dengan menambahkan pernyataan berikut ke file konfigurasi:

PubkeyAuthentication yes
echox
sumber
10
Hai, terima kasih atas upaya tetapi saya hanya membutuhkan ini. ssh -i keyfileTerima kasih!
Aivan Monceller
8
Setelah menghasilkan kunci, cara termudah dan direkomendasikan untuk menginstalnya pada server dengan ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles
5
Sangat menarik bagaimana semua orang lupa menyebutkan bahwa Anda perlu menjalankan ssh-addsetelah membuat kunci pada komputer yang Anda hubungkan. itulah yang menyebabkan sakit kepala bagi kebanyakan orang.
Luka
3
CATATAN PENTING: Klien dapat memiliki banyak kunci pribadi dan memilih berdasarkan nama arbitrer di file ~ / .ssh / config pribadi mereka di mana Host = memberikan nama yang sewenang-wenang, HostName memberikan nama atau alamat IP, Port = port target, Pengguna adalah nama pengguna tujuan, dan ItentityFile = menunjuk ke file kunci pribadi. Set fitur ini sering diabaikan dan THE solusi untuk banyak masalah konfigurasi, seperti memiliki beberapa pasangan kunci yang bertabrakan dalam ruang nama.
Richard T
1
Ketika saya mencoba dan terhubung dengan SSH menggunakan $ ssh -i ~/.ssh/id_rsa [email protected]Saya mendapatkan kesalahan [email protected]: Permission denied (publickey).saya memiliki kunci dibuat, ditambahkan secara lokal menggunakan ssh-add, dan ditambahkan sebagai kunci resmi pada server jauh.
Aaron Franke
21

Saya menggunakan ssh dengan opsi -i untuk menambahkan kunci Anda di sini.

Jika Anda ingin melewatkan arg1, arg2 dengan file .sh, cukup berikan setelah file .sh dan gunakan ruang penggunaan untuk memisahkannya.

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

Avinash Raut
sumber
1
Jangan lupa untuk mengatur izin yang tepat:chmod 600 home/avr/new.pem
Brian Haak
16

Hal pertama yang perlu Anda lakukan adalah memastikan Anda telah menjalankan perintah keygen untuk menghasilkan kunci:

ssh-keygen -t rsa

Kemudian gunakan perintah ini untuk menekan tombol ke server jauh, memodifikasinya agar sesuai dengan nama server Anda.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
Anubhav Singh
sumber
6
mari kita panggil ssh-copy-id user@hostnamesaja
andrej
7

Tambahkan kunci publik ( id_[rd]sa.pub) untuk mesin sumber Anda (tempat asal Anda) ke ~/.ssh/authorized_keysfile server tujuan untuk nama pengguna yang ingin Anda ssh masuk. Jika Anda kehilangan kunci publik, Anda ingin membuatnya dengan yang baru ssh-keygen. Menggunakan argumen default untuk itu harus ok untuk sebagian besar tujuan. Jika Anda memerlukan instruksi yang lebih terperinci, ada ribuan tutorial yang bisa Anda lakukan di google.

Kevin
sumber
4

ssh-copy-id - gunakan kunci yang tersedia secara lokal untuk mengotorisasi login pada mesin jarak jauh

Gunakan ssh-copy-iddi Server 1, dengan asumsi Anda memiliki pasangan kunci (dibuat dengan ssh-keygen):

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

Sekarang Anda harus dapat ssh ke Server 2 dengan ssh menggunakan kunci pribadi

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

Memang, jika Anda memeriksa cat ~/.ssh/authorized_keysServer 2, Anda akan melihat kunci publik ditambahkan untuk Anda.

Sida Zhou
sumber