Cara termudah untuk menyalin kunci ssh ke komputer lain?

342

Saya malas di rumah dan menggunakan otentikasi kata sandi untuk komputer di rumah saya. Saya siap untuk pindah ke otentikasi berbasis kunci. Ada banyak opsi di web tentang cara melakukan ini, termasuk catting kemudian sshing key over, scping key over langsung, dll.

Saya mencari cara termudah dan disarankan untuk menyalin kunci, mudah-mudahan ada pembungkus yang nyaman di suatu tempat dalam paket ssh Ubuntu?

Saya sudah mengetahui cara mematikan kata sandi login .

Jorge Castro
sumber

Jawaban:

463

The ssh-copy-idperintah (dalam openssh-client paket dan terinstal secara default) tidak tepat ini:

ssh-copy-id [email protected]

menyalin kunci publik dari identitas default Anda (gunakan -i identity_fileuntuk identitas lain) ke host jarak jauh.

Identitas default adalah kunci ssh "standar" Anda. Ini terdiri dari dua file (kunci publik dan swasta) di Anda ~/.sshdirektori, biasanya bernama identity, id_rsa, id_dsa, id_ecdsaatau id_ed25519(dan sama dengan .pub), tergantung pada jenis kunci. Jika Anda tidak membuat lebih dari satu kunci ssh, Anda tidak perlu khawatir menentukan identitas, ssh-copy-id hanya akan mengambilnya secara otomatis.

Jika Anda tidak memiliki identitas, Anda dapat membuatnya dengan alat ini ssh-keygen.

Selain itu, jika server menggunakan port yang berbeda dari yang default ( 22) Anda harus menggunakan tanda kutip dengan cara ini ( sumber ):

ssh-copy-id "[email protected] -p <port-number>"
Marcel Stimberg
sumber
1
Apa identitas default?
Oxwivi
17
untuk port yang berbeda gunakan ini:ssh-copy-id "user@host -p 6842"
jibon57
5
Bagaimana jika server jarak jauh yang Anda salin tidak membolehkan permintaan kata sandi dan pada dasarnya dikunci menyimpan untuk akses SSH?
Cyle
10
Di mac Anda bisa melakukannya brew install ssh-copy-idlalu jalankan perintah.
Avishai
1
@MarcelStimberg silakan perbarui jawaban untuk menyertakan -i profil; orang mungkin memiliki lebih dari 1 kunci dan mendorong semuanya, atau harus mencari opsi -i dalam komentar
Nick
129

Saya suka jawaban dari Marcel. Saya tidak tahu perintah ini. Saya selalu menggunakan apa yang saya temukan di situs web Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Saya pikir masih mempostingnya di sini, karena ini adalah ilustrasi yang bagus tentang apa yang dapat dicapai dalam kode shell dengan kekuatan ssh. Tetapi menggunakan itu ssh-copy-idsecara pasti adalah cara yang lebih aman untuk melakukannya dengan benar!

Perhatikan bahwa jika folder .sshbelum ada, perintah di atas akan gagal. Selain itu, mungkin lebih baik saat membuat file untuk mengatur izin seminimal mungkin (pada dasarnya baca-tulis hanya untuk pemilik). Ini adalah perintah yang lebih maju:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Huygens
sumber
2
Perintah yang tepat ini juga bekerja dari Mac
Mihai P.
Itu harus bekerja di bawah Unix dengan sebagian besar shell. Saya telah memperbarui posting dengan perintah yang diperbarui jika folder .sshtidak ada di sisi jarak jauh.
Huygens
1
Tidak catperlu - pengalihan input normal sudah cukup, misalnya< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig
@Huygens Terima kasih. Lebih berguna untuk mengingat yang ini, karena Anda tidak perlu menginstal apa pun dan itu juga baik untuk mengeksekusi perintah asing misalnya mengubah izin sisi server seperti yang Anda contohkan dalam contoh lanjutan Anda.
Jonathan Komar
2
Saya lebih suka cara ini karena memungkinkan Anda menggunakan verbose ssh yang sangat membantu dalam mencari tahu mengapa hal-hal rusak. sshcopyid hanya membeku dan tidak pernah bekerja, ini berjalan dengan sempurna.
Sirene
31

Metode grafis

  1. Buka AplikasiKata Sandi dan KunciKunci Pribadi Saya .
  2. Pilih kunci Anda dan kemudian klik RemoteConfigure Key for Secure Shell .

Mengatur Komputer untuk Koneksi SSH

ændrük
sumber
Saya tidak memiliki "Kata Sandi dan Kunci Enkripsi" di menu saya.
Jorge Castro
Apa rilis Ubuntu yang Anda gunakan? Di Ubuntu 10,04 LTS ini harus tersedia secara default.
ændrük
10.10, baru saja menambahkan tag. Jawaban Marcel adalah yang saya cari, meskipun +1 untuk jawaban berorientasi desktop Anda!
Jorge Castro
4
Program ini adalah seahorse.
Gilles
1
Saya pikir aplikasi ini ada di menu System-> Preferences di 10.10 (tidak bisa memeriksanya sekarang, saya di 10.04)
Huygens
18

Di Ubuntu, Anda dapat mengambil kunci dari Launchpad:

ssh-import-id [launchpad account name]

Detail :

  1. Anda memerlukan akun Launchpad agar dapat masuk atau membuat akun
  2. Setelah masuk, klik tombol di sebelah kunci SSH:
  3. Tempel konten file kunci publik Anda di bidang itu (termasuk komentar). Kunci seperti itu terlihat seperti:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Di sini, ssh-rsamenunjukkan bahwa kuncinya adalah kunci RSA, AAAAB3Nza .... UyDOFDqJpadalah kunci yang sebenarnya dan lekensteynmerupakan komentar.

  4. Simpan kunci dengan menekan Impor Kunci Publik
  5. Jika semuanya berjalan dengan baik, kunci Anda sekarang harus terdaftar di bawah kunci SSH:

Paket ssh-import-idperlu diinstal pada mesin yang perlu diakses dari jarak jauh. Paket ini diinstal bersama dengan openssh-serverpaket karena ini adalah paket yang disarankan untuk openssh-server. Setelah memastikan bahwa ssh-import-idtelah diinstal pada mesin klien, jalankan:

ssh-import-id [launchpad account name]

Ini akan mengunduh kunci publik dari server Launchpad melalui HTTPS yang melindungi Anda dari serangan MITM.

Di Ubuntu Lucid dan sebelumnya, Anda dapat melakukan hal yang sama dengan:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

The echoperintah yang dibutuhkan untuk mendapatkan baris tambahan setelah baris dengan kunci SSH.

Lekensteyn
sumber
14

untuk port khusus

ssh-copy-id -i "[email protected] -p2222"

-saya alihkan default ke ~ / .ssh / id_rsa.pub, jika Anda menginginkan kunci lain, letakkan path dari kunci tersebut setelah -i

PERINGATAN: Jika Anda tidak menulis -i itu akan menyalin semua kunci Anda yang ditemukan di ~ / .ssh

Omar S.
sumber
1
Apakah Anda yakin tentang PERINGATAN itu? "-i identity_file - Gunakan hanya kunci yang terkandung dalam identity_file (daripada mencari identitas melalui ssh-add (1) atau di default_ID_file). Jika nama file tidak diakhiri dengan .pub, ini akan ditambahkan. Jika nama file dihilangkan, default_ID_file digunakan. "
Yousha Aleayoub
0

ssh-copy-idmelakukan hal itu. Saya tidak yakin mengapa beberapa jawaban lain di sini menambahkan informasi yang tidak akurat. Bantuan menunjukkan yang berikut:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Saya baru saja mencoba yang berikut ini pada klien Ubuntu 18.04 dengan server CentOS 7.6 dan itu bekerja seperti pesona. Contoh ini menunjukkan menggunakan porta kustom 2222, dan menentukan kunci publik di~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]

Sebelum menjalankan perintah, saya benar-benar menggunakan -nsakelar di akhir untuk melakukan lari kering yang mengonfirmasi bahwa perintah akan berfungsi sebagaimana dimaksud. Setelah saya konfirmasi saya menjalankan perintah lagi seperti di atas, tanpa -nsaklar.

isapir
sumber