Bagaimana cara menambahkan identitas untuk SSH secara permanen?

37

Saya perlu menjalankan ssh-add <key>setiap kali saya perlu ssh ke server web. Apakah ada cara untuk menambahkan ID secara permanen, jadi saya tidak perlu terus menambahkan identitas pada setiap login?

EDIT: Kuncinya adalah file pem, yang telah saya unduh dari layanan cloud.

theTuxRacer
sumber

Jawaban:

40

Buat kunci Anda seperti biasa:, ssh-keygenlalu tempatkan kunci itu ke server jarak jauh ssh-copy-id, yang akan menyinkronkannya ke kunci server jarak jauh yang diterima.

ssh-keygen
ssh-copy-id user@host

Ini akan meminta kata sandi Anda kemudian melakukan semua langkah yang diperlukan untuk menautkan .pubkunci Anda dengan server SSH jarak jauh.

Secara default ini akan menyalin semua kunci .pub Anda ke server jarak jauh. Jika Anda baru saja membuat kunci dengan ssh-keygenini maka ini bukan masalah (karena Anda hanya punya satu!). Namun, jika Anda memiliki beberapa kunci, Anda hanya dapat menyalin kunci tertentu dengan -ibendera.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Mengganti key_name.pubdengan nama kunci.

Marco Ceppi
sumber
4
Untuk seseorang seperti saya (atau penanya pertanyaan) yang hanya terpapar ssh menggunakannya untuk mengakses server yang di-hosting di mana layanan web membuat kunci dan memberikannya kepada saya (dalam kasus saya, server AWS), jawaban ini sulit untuk mengerti tanpa melakukan beberapa penelitian latar belakang yang signifikan. Saya tidak pernah menggunakan ssh-keygenatau ssh-copy-id, misalnya. Di sisi lain, jawaban seperti ini sangat jelas dan bermanfaat bagi saya mengingat tingkat pengetahuan saya. Terserah Anda apakah Anda ingin mengubah jawaban Anda dengan cara apa pun untuk membantu orang-orang bodoh seperti saya. :)
Mark Amery
Jawabannya mengasumsikan bahwa saya ingin membuat kunci baru. Bagaimana jika saya hanya ingin mendaftarkan kunci yang ada dengan keyring?
donquixote
@donquixote: lihat jawaban di bawah ini oleh user626052.
naught101
7

Anda dapat membuat kunci ssh dengan perintah:

ssh-keygen

Kemudian Anda dapat menyalin kunci Anda ke server dengan:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Sekarang Anda dapat secara otomatis masuk ke server web Anda

Arthur Knopper
sumber
1
Untuk menyalin kunci ke server Anda hanya dapat menggunakan ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameatau ~/.ssh/id_rsa.pubmasing - masing. Sebenarnya, jika Anda menggunakan nama default untuk file kunci Anda bahkan tidak harus menentukannya.
Carsten Thiel
5

letakkan ini di ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 
pengguna626052
sumber
3
Ini adalah satu-satunya jawaban yang menjawab pertanyaan sebenarnya. Yang lain hanya menambahkan kunci publik default ke server target tunggal, yang menjengkelkan jika Anda memiliki dua + terpisah untuk set server yang berbeda.
naught101
3

Jika kunci Anda adalah tanpa kata sandi dan dinamai sebagai salah satu file yang ssh akan coba dicari ketika mengidentifikasi ( ~/.ssh/id_dsaatau ~/.ssh/id_rsa), Anda tidak harus menambahkannya ke agen Anda.

TAPI. Jika ada kemungkinan sekecil apa pun dari file-file itu dicuri, Anda hanya akan mengizinkan siapa saja untuk mengakses server tempat Anda menggunakan identitas ini. Singkatnya, pwned.

IMHO, kunci pribadi tanpa kata sandi adalah praktik yang buruk, dan harus digunakan hanya pada lingkungan ~/.ssh/authorized_keysyang sangat membatasi.

zuzur
sumber
1
ssh-agent dapat menyimpan kunci privat Anda yang didekripsi, saat Anda masuk. Jika diaktifkan, gnome-keyring bahkan dapat menggunakan kata sandi login Anda. Oh, dan ssh-copy-id dapat menyalin kunci publik Anda ke server juga.
Frank
2

Tulis skrip shell pendek yang akan menjalankan ssh-add dan kemudian sambungkan seperti berikut:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Anda kemudian dapat ssh ke host Anda dengan satu perintah.

hgolov
sumber
1

Untuk AWS, unduh tombol pem, dan jalankan:

ssh-add /path/to/pemfile.pem

Itu berhasil bagi saya, ubuntu 18.04. Sumber , Tidak ada lagi yang dibutuhkan.

NB : Namun, penting untuk mengatur izin ke 400 sebelum melakukan ini.

chmod 400 /path/to/pemfile.pem

Jika tidak, Anda akan mendapatkan kesalahan:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
PERINGATAN: FILE KUNCI PRIVATE YANG TIDAK DIPROTEKSI! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ Izin 0664 untuk '/ rumah / ke_bisnis/blablabla.pem' terlalu terbuka. Diperlukan bahwa file kunci pribadi Anda TIDAK dapat diakses oleh orang lain. Kunci pribadi ini akan diabaikan.

toing_toing
sumber
0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 
Wangjianli
sumber
-2

Apakah Anda berbicara tentang Amazon Cloud? Di ~ / .bashrc Anda, buat variabel lingkungan:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

sumber
ya, saya berbicara tentang cloud, tetapi ini adalah pasangan kunci untuk ssh ke dalam instance, dan variabel lingkungan di atas diperlukan untuk menggunakan alat api :)
theTuxRacer
Baik. Jadi buat kunci RSA tanpa kata sandi: 'ssh-keygen -t rsa' dan kemudian gabungkan kunci publik yang dihasilkan (~ / .ssh / id_dsa.pub) ke file server ~ / .ssh / authored_keys server jarak jauh. Satu kalimat untuk menyelesaikan ini diberikan oleh banyak orang.