Bagaimana saya mengatur SSH sehingga saya tidak perlu mengetikkan kata sandi saya?

153

Bagaimana cara saya mengatur SSH sehingga saya tidak perlu mengetikkan kata sandi saat menghubungkan ke host?

Richard Hoskins
sumber
Orang mungkin berdebat jika menggunakan kunci semacam itu tidak memerlukan kata sandi. Untuk menghindari siapa pun yang memegang kunci pribadi Anda dapat benar-benar menyalahgunakannya, seseorang dapat melindungi kunci tersebut dengan kata sandi itu sendiri. Tentu saja, seseorang dapat mengosongkan kata sandi itu, tetapi ada banyak kasus di mana itu tidak akan direkomendasikan.
Arjan
Pada Cygwin terbaru dengan SSH terbaru, saya diminta kembali karena saya perlu melakukan perubahan pada perangkat saya ~/.ssh/configyang sekarang diperlukan PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
HDave

Jawaban:

164

Buat kunci SSH (jika Anda tidak memilikinya)

Jika Anda kebetulan menggunakan GNOME, aplikasi kuda laut ("Kata Sandi dan Kunci Enkripsi") dapat melakukannya untuk Anda: File -> Baru -> Kunci Shell Aman .

Jika Anda lebih suka terminal, jalankan untuk menghasilkan keypair. Jenis keypair yang valid adalah:ssh-keygen -t <type>

  • rsa: default
  • dsa: lebih atau kurang setara, kecuali terbatas pada kunci 1024 bit
  • ecdsa: keamanan yang sama dengan kunci yang lebih kecil, tetapi relatif baru dan agak jarang dalam perangkat lunak SSH.
  • ed25519: Keamanan tinggi (lebih tahan terhadap serangan saluran samping dan generator nomor acak lemah). Generasi tanda tangan yang sangat cepat. Sangat baru. Hanya tersedia di OpenSSH> = 6.5 .

Program akan meminta Anda untuk frasa sandi dan lokasi tempat menyimpan kunci baru. Disarankan menggunakan jalur default yang disarankan karena semua alat lain akan mencarinya di sana.

Unggah kunci publik ke server jarak jauh

Sekali lagi, kuda laut sering dapat melakukannya untuk Anda - di My Personal Keys , klik kanan pada kunci SSH Anda dan pilih Configure key for secure shell .

Atau, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostdi terminal.

Atau, sepenuhnya langkah-demi-langkah secara manual:

  1. Buat direktori (jika belum ada) bernama .sshdi direktori home dari pengguna jarak jauh pada host jarak jauh.
  2. Di direktori itu, buat file bernama authorized_keys(jika belum ada).
  3. Dalam kasus remote umasklebih liberal dari biasanya, membuat file tidak kelompok-ditulis: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Akhirnya, entah bagaimana salin (tambahkan) konten kunci publik lokal Anda ( ~/.ssh/id_rsa.pub) ke ~/.ssh/authorized_keysfile jarak jauh .

Masukkan kunci ke agen ssh

Jika Anda memasukkan kunci pribadi Anda ke agen ssh , itu akan menyimpan kunci yang didekripsi dalam memori. Kami ingin ini menghindari memasukkan kembali kata sandi setiap kali kami masuk ke server.

Pertama, agen harus dimulai atau jalur soket komunikasi yang diluncurkan dimasukkan ke dalam variabel. Menjalankan ssh-agent pada terminal akan menghasilkan perintah untuk menetapkan dan mengatur variabel agen. Perintah-perintah ini dapat disimpan dalam file untuk digunakan di terminal yang berbeda. Atau, seseorang dapat menjalankan perintah-perintah ini dan lupa menggunakan kembali agen yang sama di terminal lain. misalnya: eval $(ssh-agent).

Memuat kuncinya adalah masalah sederhana mengeksekusi ssh-adddan memberikannya frasa sandi.

Jika Anda menggunakan GNOME, gnome-keyring-daemon biasanya menyediakan fungsionalitas SSH agent yang sama dengan ssh-agent, jadi Anda tidak perlu memulai apa pun. GNOME akan secara otomatis memuat dan membuka kunci kunci saat login juga.

Masuk ke server jauh tanpa kata sandi

Jika semuanya dilakukan dengan benar, menggunakan tidak akan meminta Anda untuk kata sandi. Jika ada sesuatu yang salah dengan agen dan bukan kunci, Anda akan diminta untuk mengetikkan frasa sandi untuk kunci tersebut, dan bukan kata sandi untuk akun pengguna.ssh user@server

Apa pun yang menggunakan ssh untuk komunikasi akan berfungsi tanpa memasukkan kata sandi akun pengguna ketika kunci yang benar dimuat dalam agen. Program seperti scp , sftp dan rsync memanfaatkan ini.


Catatan:

  • Anda hanya perlu kunci SSHv2, karena SSHv1 sangat tidak aman dan sekarang tidak digunakan.
  • Anda juga hanya perlu satu jenis kunci - RSA atau DSA sudah cukup. (ed25519 dan ECDSA keduanya baru-baru ini dan karenanya tidak didukung di mana-mana).
  • Semua langkah ini sama untuk kunci RSA dan DSA. Jika Anda menggunakan DSA, gunakan id_dsaalih-alih id_rsa, dan ECDSA akan memilikinya id_ecdsa.
  • Server OpenSSH lebih tua dari 3.0 digunakan authorized_keys2- tetapi sangat tidak mungkin Anda akan menemukan sesuatu yang lebih tua dari 5.0 digunakan.
  • Instruksi ini hanya berlaku untuk OpenSSH versi 3.0 dan yang lebih baru. lsh,, ssh.comdan server SSH (Unix dan bukan) lainnya tidak termasuk dalam tutorial ini.

Contoh:

  • Menyalin kunci publik ke host jarak jauh:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / otor_keys '# atau ini
    
  • Menyimpan variabel agen untuk digunakan kembali (contoh rumit)
    ssh-agent> ~ / .ssh / cross-terminal-agent
    . ~ / .ssh / cross-terminal-agent
    
grawity
sumber
7
ah, Anda harus mengatakan "ssh-add {path-to-private-key-file}" dan kemudian akan meminta kata sandi Anda. Harap buat ini lebih eksplisit di posting Anda. Anda juga harus menambahkan "Keempat, jalankan ssh". Bagian dari masalah dengan dokumentasi dengan hal-hal ini adalah bahwa hal itu menyoroti langkah-langkah yang tampaknya jelas yang TIDAK jelas bagi seseorang yang baru dalam proses yang tidak tahu apa yang sedang terjadi dan bagaimana program-program ini bekerja bersama.
Jason S
1
Jason: ssh-add -l adalah untuk memeriksa apakah agen berjalan. ssh-add tanpa argumen akan menambahkan kunci dari lokasi default (yaitu ~ / .ssh / id_rsa). Lagi pula, diperbarui.
grawity
4
ada perintah ssh-copy-idyang menyalin kunci publik ke host target dan menetapkan izin secara otomatis.
Hasen
1
Jawaban bagus! Ada sedikit yang hilang tentang izin file dari file-file utama - Saya baru saja mengalami masalah yang berkaitan dengan itu hari ini. File kunci pribadi hanya dapat diakses oleh saya, dan file kunci publik hanya dapat ditulis oleh saya.
ripper234
1
Satu liner: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address(ganti saja username@server-ip-or-address).
totymedli
22

Anda tidak menentukan Unix yang Anda gunakan, apa yang Anda hubungi Unix, shell apa yang Anda gunakan, varian SSH apa yang Anda gunakan, dll. Jadi beberapa dari ini mungkin perlu sedikit disesuaikan; ini didasarkan pada versi OpenSSH yang cukup baru, yang digunakan pada banyak varian unix.

Ini semua dari sistem desktop lokal Anda.

ssh-keygen

Pastikan untuk menggunakan default untuk nama kunci. Saya sarankan Anda lakukan menetapkan passphrase pada tombol itu, jika tidak itu masalah keamanan. "-t rsa" bukan ide yang buruk, tapi mungkin tidak diperlukan.

ssh-copy-id username@server

Itu akan menanyakan kata sandi yang akan Anda gunakan untuk masuk, dan mengatur hal-hal yang berwenang untuk Anda. (tidak perlu melakukannya dengan tangan)

Lalu ini:

`ssh-agent`

atau mungkin ini:

exec ssh-agent sh

atau:

exec ssh-agent bash

Itu akan memulai agen SSH yang dapat menahan kunci Anda. Pada banyak varian Unix modern, jika Anda masuk secara grafis, ini sudah terjadi. Varian pertama (dengan backticks) menempatkan ssh-agent di latar belakang dan mengatur variabel lingkungan untuk berbicara dengannya. Dua yang kedua meminta agen menjalankan shell untuk Anda, sehingga ketika Anda keluar dari shell, agen keluar.

Banyak varian Unix modern sudah memiliki agen berjalan untuk Anda, terutama jika Anda login secara grafis. Anda dapat mencoba " ps aux | grep ssh-agent" atau " ps -ef | grep ssh-agent"; jika sesuatu sudah berjalan, gunakan itu.

Lalu, akhirnya:

ssh-add

Itu akan meminta kata sandi; berikan yang Anda berikan ssh-keygen. Ada juga cara untuk membuatnya bertanya secara grafis. Dan Anda dapat memasukkan ssh-agent dan ssh-add barang ke dalam skrip login Anda (setup berbeda tergantung pada shell yang Anda gunakan) untuk mengotomatisasi ini, tetapi beberapa varian Unix (Linux Ubuntu saat ini, misalnya) melakukan sebagian besar dari itu secara otomatis, jadi yang perlu Anda lakukan hanyalah membuat kunci dan menggunakan ssh-copy-id untuk memasangnya di host jarak jauh.

Sekarang, " ssh username@server" seharusnya berfungsi tanpa meminta otentikasi. Di belakang layar, itu menggunakan kunci yang memegang ssh-agent, dan meminta agen untuk melakukan trik penandatanganan sihir untuk itu.

freiheit
sumber
11

Dimungkinkan untuk melakukan ini di Putty pada Windows juga.

Setelah Anda memasangkan kunci publik / pribadi semua (seperti jawaban lain di sini menunjukkan) jalankan PuttyGen. Di sana, muat kunci pribadi yang sudah Anda siapkan, dan kemudian simpan sebagai kunci pribadi Putty (ppk).

Kemudian di Putty, cukup klik pada sesi tersimpan yang Anda ingin masuk otomatis dan klik Muat. Dari sini, masuk ke Connection -> Data di panel kiri, dan ketik "Nama pengguna login otomatis" pada nama pengguna untuk server jauh itu:

Entri nama Putty

Setelah itu masuk ke Connection -> SSH -> Auth, dan telusuri ppk yang Anda buat di PuttyGen:

Entri kunci pribadi Putty

Kemudian kembali ke halaman sesi dan simpan sesi yang Anda muat sebelumnya.

matthews
sumber
Tautan gambar pertama, "Entri nama pengguna Putty", tampaknya rusak.
Peter Mortensen
2
Putty menyertakan versi sendiri dari ssh-agent; itu disebut Pageant. Ini berjalan di system tray dan menyimpan kunci Anda untuk Anda. Anda tidak perlu menjalankan ssh-agent, cukup centang "Izinkan penerusan agen" di opsi Putty di bawah bagian Auth, dan koneksi Pageant akan diteruskan ke ujung jarak jauh untuk membuat agen utama Anda tersedia untuk itu.
Kevin Panko
3

Dari pertanyaan yang sangat mirip pada ServerFault , saya sarankan menggunakan ssh-copy-id , yang melakukan semua langkah yang terkait dengan pengaturan kunci otentikasi untuk Anda:

ssh-copy-id adalah skrip yang menggunakan ssh untuk masuk ke mesin jarak jauh (mungkin menggunakan kata sandi login, jadi otentikasi kata sandi harus diaktifkan, kecuali jika Anda telah menggunakan beberapa identitas dengan cerdas)

Itu juga mengubah izin dari rumah pengguna jarak jauh, ~ / .ssh, dan ~ / .ssh / berwenang_keys untuk menghapus kemampuan menulis grup (yang sebaliknya akan mencegah Anda dari login, jika sshd jarak jauh telah menetapkan StrictModes dalam konfigurasinya).

Jika opsi -i diberikan maka file identitas (default ke ~ / .ssh / identity.pub) digunakan, terlepas dari apakah ada kunci di ssh-agent Anda.

Yang perlu Anda lakukan hanyalah ini:

ssh-copy-id user@host

Ketikkan kata sandi Anda sekali, dan Anda siap melakukannya!

Chris Bunch
sumber
3

Terlepas dari semua yang telah diberitahukan tentang cara mengatur kunci ssh, saya merekomendasikan Keychain sebagai antarmuka konsol ssh-agent yang memungkinkan Anda untuk menangani satu per proses sistem saja, bukan per login.

Saya tahu sudah ada alat GNOME dan KDE yang melakukan hal yang sama tetapi jika Anda adalah tipe pecandu konsol ini hebat (dan dapat digunakan pada sebagian besar sistem Unix).

Untuk menggunakannya, cukup tambahkan berikut ini ke Anda ~/.bashrc(mirip untuk shell lainnya):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
Fran
sumber
2

http://linuxproblem.org/art_9.html

Tujuan Anda

Anda ingin menggunakan Linux dan OpenSSH untuk mengotomatiskan tugas Anda. Karena itu Anda memerlukan login otomatis dari host A / pengguna a ke Host B / pengguna b. Anda tidak ingin memasukkan kata sandi apa pun, karena Anda ingin memanggil ssh dari dalam skrip shell.

TheTXI
sumber
1
Downvote itu bukan milik saya, tetapi saya tidak keberatan orang menghapus jawaban mereka jika mereka melihat orang lain memposting balasan yang hampir serupa beberapa saat sebelumnya.
Arjan
2
Arjan: Untuk sebagian besar saya setuju dengan Anda, tetapi ketika posting hanya dipisahkan oleh beberapa detik saya tidak selalu berpikir adil untuk menghukum orang di tempat ke-2. Saya tidak mengatakan Anda harus menghargai mereka dengan upvoting, tetapi downvoting memberi kesan bahwa jawabannya salah, bukannya tidak tepat waktu
TheTXI
2

Saya menulis tutorial yang sangat singkat ini setelah merasa BENAR-BENAR frustrasi dengan tutorial yang BENAR-BENAR panjang karena sebenarnya sangat sederhana :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub
samthebest
sumber
2

Putty memiliki -pwopsi yang memungkinkan Anda membuat pintasan di desktop seperti ini:

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
Enes Genç
sumber
1
  1. Pada host penghubung, jalankan ssh-keygen. (Jika memberitahu Anda bahwa Anda harus menentukan jenis, lakukan ssh-keygen -t rsa.) Ketika meminta Anda untuk lokasi file, ambil yang default. Ketika meminta Anda untuk passphrase, tekan enter tanpa frasa sandi.
  2. cat ~/.ssh/id_rsa.pub(atau apa pun lokasi default file di ssh-keygenadalah, meskipun Anda harus memiliki benar-benar tua sshinstall untuk itu menjadi berbeda); salin output ke clipboard Anda.
  3. Masuk secara normal ke host tujuan sebagai akun yang ingin Anda sambungkan. Edit file ~/.ssh/authorized_keys(jika ~/.sshtidak ada, sloginke suatu tempat; ini adalah cara sederhana dan mudah untuk membuatnya dibuat dengan izin yang tepat). Tempel papan klip Anda (berisi id_rsa.pubdari host lain) ke dalam file ini.
kekacauan
sumber
3
-1 untuk menyarankan untuk tidak menambahkan frasa sandi. Tanpa frasa sandi, siapa pun yang membaca file sekarang dapat berpose sebagai pengguna yang sah.
bortzmeyer
2
Pertama, dia meminta untuk tidak harus mengetikkan kata sandi; Saya tidak benar-benar berpikir bahwa harus mengetikkan kata sandi, bukan kata sandinya akan menjadi perbaikan. Kedua, Anda salah; itu sebabnya ada kunci publik dan kunci pribadi, sehingga kunci publik dapat keluar di dunia.
kekacauan
Kata sandi yang dimaksud diketik selama pembuatan kunci, tidak setiap kali Anda terhubung. Benar?
Richard Hoskins
Tidak. Kunci yang dihasilkan dengan frasa sandi mengharuskan frasa sandi dimasukkan setiap kali kunci digunakan.
kekacauan
2
Salah. Dengan ssh-agent (lihat jawaban yang diterima), Anda mengetikkan kata sandi hanya sekali per sesi.
bortzmeyer
0

Jika Anda ingin melakukan semuanya di terminal di Linux:

Di tuan rumah

cd ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "beberapa teks komentar jika Anda ingin" -f id_ArbitraryName

Item dalam {} adalah opsi, gunakan rsa atau dsa dan pilih ukuran bit (lebih besar lebih aman)

Maka Anda perlu menambahkan izin ke file Authorized_keys dan Authorized_keys2.

cat id_ArbitraryName.pub >> otor_keys

cat id_AribtraryName.pub >> otor_keys2

Kemudian unduh file id_AribtraryName ke kotak yang ingin Anda ssh. Jika kotak penghubung berbasis unix, file konfigurasi mungkin diperlukan (dalam dempul, seseorang di atas membahasnya).

Di Kotak Menghubungkan

Di file konfigurasi Anda - vim ~ / .ssh / config

Host example.host.com # atau nama komputer Anda

Nama pengguna pengguna

IdentityFile ~ / .ssh / id_ArbitraryName

File config membutuhkan izin 600. Folder SSh membutuhkan 700.

Semoga itu bisa membantu jika Anda mengalami masalah konfigurasi yang banyak dihilangkan.

nerdwaller
sumber