Bagaimana saya bisa menyimpan kunci SSH yang dilindungi kata sandi secara permanen?

9

Saya menggunakan Manajer Jendela Keren

Bagaimana saya bisa menambahkan kunci pribadi secara permanen dengan kata sandi?

Terinspirasi oleh jawaban di sini saya telah menambahkan kunci pribadi di ~ / .ssh / config

Isi ~ / .ssh / config:

IdentityFile 'private key full path'

Izin ~ / .ssh / config: 0700

Tetapi itu tidak berhasil untuk saya.

Jika saya menambahkan kunci secara manual di setiap sesi, itu berfungsi tetapi saya mencari cara yang lebih elegan (bukan di .bashrc)

EDIT :

  • Menggunakan versi Gnome classic (tanpa efek).

Setelah menambahkan kunci SSH ssh-copy-ifke host jarak jauh, saya mendapatkan prompt berikut di terminal (Terminal GNOME 3.0.1) ketika saya masuk:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Menggunakan Awesome window manager v3.4.10. Saya sudah gnome-keyring-dameonjadi saya membunuh pid lain dan menjalankan gnome-keyring-daemon --start | grep SOCK(saya juga menambahkannya di. Profil) output (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

Saya mengikuti langkah-langkah yang sama persis dan saya juga tidak punya dialog ssh-add GUI.

EDIT 2 :

Saya membuat kunci yang dilindungi kata sandi baru dari Ubuntu 11.10 mesin virtual pada kesatuan dan saya masih tidak bisa mendapatkan prompt kata sandi.

EDIT 3 : Tampaknya ini tidak bisa berfungsi di Awesome window manager :( dan mungkin lainnya ..

pl1nk
sumber
1
Apa gunanya menambahkan kunci SSH yang dilindungi kata sandi? Itu mengalahkan tujuannya ...
MarkovCh1
3
@Syzygy Nah, apakah Anda selalu mengetikkan kata sandi dari berbagai layanan dan aplikasi atau Anda menggunakan kunci untuk membuka kunci kata sandi dengan kata sandi login Anda?
pl1nk
Ada lagi pemikiran / pertanyaan, pl1nk? Masa tenggang karunia berakhir segera :-)
ish
@izx Saya telah memeriksa semua yang Anda sebutkan dan semua seperti yang diharapkan. Seperti yang saya sebutkan pada pembaruan saya, saya juga menggunakan Gnome. Haruskah saya mengajukan bug?
pl1nk
Anda mungkin menemukan beberapa petunjuk di sini . Sepertinya urutan di mana hal-hal mulai penting, dan untuk gnome-keyring-daemon sampai ke dbus juga penting.
John S Gruber

Jawaban:

2

Jika Anda menggunakan Unity, atau manajer sesi yang memulai gnome-keyring-daemon, Anda dapat menggunakan Kuda Laut (Kata Sandi dan Kunci) untuk membuat kunci, menentukan untuk apa, menetapkan frasa sandi, dan membagikan kunci publiknya ke komputer yang akan Anda gunakan dengan ssh. Tidak ada perintah terminal yang diperlukan.

Anda membuat kata sandi dengan:

  1. memilih File-> Baru dan pilih Secure Shell Key. Tekan Lanjutkan.

  2. Ketikkan nama deskriptif, lalu pilih Create and set up.

  3. Anda akan diminta memasukkan frasa sandi dua kali (yang kedua kali untuk memeriksa bahwa Anda tidak salah memasukkannya pertama kali.

  4. Masukkan komputer yang mana kunci publik harus digunakan dan nama pengguna pada komputer yang Anda gunakan adalah kunci tersebut. Kunci publik akan disalin ke komputer lain itu, meminta kata sandi Anda di komputer itu jika perlu.

Sekarang My Personal Keystab akan menampilkan kunci.

Dengan anggapan gnome-keyring-daemon dimulai dengan benar ketika Anda masuk ke Lightdm, dan lagi oleh manajer sesi Anda, ketika Anda pertama kali menggunakan kunci dengan ssh Anda akan diminta untuk frasa sandi. Dalam kotak dialog ini Anda dapat memberikan frasa kunci, pilih Detailskontrol dan minta agar kunci kunci dibuka kuncinya setiap kali Anda masuk - secara otomatis menyediakan kunci ini. tekanOK

Anda mungkin tidak diminta dengan cara ini jika ada kunci lain yang tersedia untuk masuk ke komputer jarak jauh.

Setelah ini selesai, tab Kuda Laut pertama Passwordsakan mencantumkan "Buka kata sandi entri" untuk nama kunci. Klik pada segitiga sebelum " Kata Sandi: Login" untuk melihatnya.

John S Gruber
sumber
Jadi fungsi ini tidak berfungsi dengan WM Luar Biasa Saya ingin terus menggunakan Luar Biasa sehingga saya akan terus menggunakan solusi saya.
pl1nk
19

Membuat kunci SSH yang dilindungi kata sandi tetap ada di seluruh sesi dan reboot

Ini mungkin yang Anda inginkan: memasukkan frasa sandi kunci sekali membuatnya tersedia kapan saja Anda masuk. Ini akan bekerja untuk sebagian besar pengguna yang menggunakan desktop Unity atau Gnome.

  • Saat Anda terhubung setelah menambahkan kunci publik ke server jauh, Anda akan mendapatkan dialog GUI ssh-add:

    masukkan deskripsi gambar di sini

  • Luaskan "Detail" dengan mengklik pada segitiga, dan Anda akan mendapatkan yang di bawah ini. Standarnya adalah "kunci kunci saat saya keluar", yang mengharuskan Anda memasukkan kata sandi sekali per sesi:

    masukkan deskripsi gambar di sini

  • Ubah untuk membuka kunci secara otomatis ... setiap kali saya masuk , yang berarti akan berfungsi kapan saja Anda telah masuk ke sesi Anda - itu "dikontrol" oleh kata sandi pengguna Anda. Ini akan bertahan di seluruh reboot.

    masukkan deskripsi gambar di sini

  • Masukkan frasa sandi kunci satu kali dan hanya itu - kunci tersebut dikonfirmasi melalui login awal yang sukses ke lingkungan desktop Anda.


Jika Anda menggunakan AwesomeWM

Diuji dengan instalasi baru AwesomeWM di userid baru

  • Secara default, AwesomeWM menggunakan ssh-agent:

    $ ekspor | grep SSH
    mendeklarasikan -x SSH_AGENT_PID = "5479"
    mendeklarasikan -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Untuk mendapatkan langkah-langkah di atas untuk bekerja, Anda harus menggunakan gnome-keyring-daemondaemon otentikasi SSH, bukan ssh-agent. Saat Anda masuk menggunakan lightdm, PAM dimulai gnome-keyring-daemonyang akan mencoba membuka kunci kunci masuk dengan kata sandi buka Anda, tetapi Anda harus menambahkan konfigurasi Anda agar tetap berjalan dan menggunakannya.

  • Tambahkan yang berikut ini ke ujung Anda ~/.xprofile:

      #! / bin / bash
      eval $ (gnome-keyring-daemon --start)
      ekspor SSH_AUTH_SOCK
      ekspor GNOME_KEYRING_PID
      ekspor GNOME_KEYRING_CONTROL
    

Perintah dalam ~/.xprofilefile akan dieksekusi oleh xsession sebelum memulai manajer jendela yang luar biasa dan akan mengikatnya dengan gnome-keyring-daemon --loginproses yang dimulai oleh PAM melalui variabel lingkungan di atas.

  • Logout kembali ke lightdm dan masuk kembali, dan sekarang ketika Anda melakukannya ssh user@host, Anda harus mendapatkan popup di atas - gunakan itu untuk memecahkan kode kunci pribadi Anda di ~ / .ssh / dan simpan kunci pribadi Anda ke keyring login gnome-keyring.

Solusi umum untuk lingkungan window manager / desktop

  • adalah menggunakan gnome-keyring-daemonalih-alih ssh-agent. Untuk ini, Anda harus menjalankan gnome-keyring-daemon dan menginisialisasi dan melakukan ini setelah ssh-agentdimulai atau tidak memulai ssh-agentsama sekali.

  • ssh(sebenarnya ssh-add) memutuskan agen otentikasi mana yang harus dihubungi berdasarkan nilai SSH_AUTH_SOCKvariabel lingkungan, yang dapat diperiksa dengan mengetikexport | grep SOCK

  • ini adalah formulir SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130untuk ssh-agent (BUKAN apa yang Anda inginkan untuk dapat menyimpan kunci Anda)

  • tetapi dari bentuk SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"untuk gnome-keyring-daemon (yang Anda inginkan)

  • jadi periksa nilainya, dan periksa ps aux | grep keyringapakah gnome-keyring-daemon sedang berjalan, dan jika demikian, inisialisasi dengan hasil darignome-keyring-daemon --start

  • Anda kemudian dapat memeriksa identitas tersimpan terkait di konsol dengan mengetik ssh-add -l- jika itu menunjukkan "tidak ada agen" maka Anda membuat kesalahan dengan mengkonfigurasi gnome-keyring-daemon.

ish
sumber
Ya saya belum melihat ini! Perintah mana yang dapat saya gunakan atau bahkan lebih baik perintah apa yang dipanggil oleh dialog ini?
pl1nk
@izx saat menggunakan ini apakah perlu menggunakan ssh-add?
John S Gruber
@JohnSGruber Tidak, selama kunci privat ada ~/.ssh, tidak perlu digunakan ssh-add- dialog akan muncul saat pertama kali digunakan. Perhatikan bahwa ini hanya berfungsi di Unity / Gnome - Saya menemukan dalam obrolan bahwa OP menggunakan AwesomeWM , di mana ini tidak berfungsi!
ish
1
@ pl1nk: silakan lihat solusi terbaru untuk AwesomeWM menjelang akhir jawaban.
ish
@izx - Terima kasih atas dukungan Anda secara keseluruhan, periksa pertanyaan saya yang diperbarui.
pl1nk
2

Solusi untuk masalah Anda menggunakan agen ssh. Anda hanya perlu membuka kunci kata sandi kunci Anda sekali, setelah itu disimpan dalam memori oleh agen dan digunakan secara otomatis

  • Hasilkan pasangan kunci pribadi / publik dengan ssh-keygen -t dsa
  • Salin kunci publik ke mesin jarak jauh, biasanya ini ~ / .ssh / official_keys (gunakan ssh-copy-iduntuk ini)
  • Jalankan ssh-addsebelum masuk ke sistem jarak jauh, ini akan meminta frasa sandi Anda dan menyimpannya
  • Masuk ke sistem jarak jauh, tidak perlu kata sandi

ssh-agent dijelaskan dengan baik di .net, misalnya di sini:

Keuntungan lain dari ssh-agent adalah jika Anda login ke sistem jarak jauh dengan ssh -A [email protected]Anda dapat ssh lebih lanjut dari komputer domain.name ke komputer ketiga yang berisi kunci publik Anda tanpa setiap menyalin kunci pribadi Anda ke komputer domain.name (dan itu tidak pernah melihat kunci pribadi Anda, hanya tantangan / respons satu kali).

Floyd
sumber
Bagaimana saya bisa melakukan itu? Tidak jelas dari instruksi yang Anda kirim. Apalagi ini terkait Ubuntu?
pl1nk
Saya telah mengedit posting saya dengan instruksi terperinci
Floyd
Solusi Anda menyimpan kata sandi per sesi, juga dalam kasus saya tampaknya merupakan konflik dengan gnome-keyring seperti yang Anda lihat dalam jawaban saya.
pl1nk
@ pl1nk: jadi Anda perlu kata sandi disimpan di seluruh sesi - yaitu, hanya diminta satu kali untuk setiap boot?
ish
ya, Anda harus memberikan kata sandi sekali per sesi. Ini adalah gagasan di balik kunci ssh yang dilindungi kata sandi, untuk memberikan lapisan keamanan lain di luar kemampuan untuk mengakses file kunci pribadi setelah login.
Floyd
-1

kamu bisa menggunakan

ssh-add 'filename or fullpath'

Anda akan dimintai kata sandi jika kunci Anda memilikinya

maka Anda dapat terhubung dengan kata sandi keluar

eyadof
sumber
1
Seperti yang saya sebutkan untuk pertanyaan saya, saya mencari cara yang lebih elegan.
pl1nk
-2

Jika Anda ingin bekerja dengan kunci pribadi, lakukan:

ssh-keygen -t rsa -N ''

Kemudian:

salinan .ssh/id_rsa.pub ke tujuan mesin .ssh/authorized_keysmelalui via scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Semua selesai.

Terhubung ke mesin jarak jauh tanpa kata sandi:

ssh user@remote_machine

Dan kami tidak memiliki prompt kata sandi.

Octávio Filipe Gonçalves
sumber
Ini akan terus menanyakan kata sandi kunci saya setiap kali.
pl1nk
1
Mungkin karena ketika Anda menjalankan ssh-keygen -t rsa -N '', Anda memasukkan kata sandi. Jadi, ketika Anda menjalankan perintah di atas, jangan masukkan kata sandi, cukup tekan tombol "ENTER".
Octávio Filipe Gonçalves
Yah saya ingin memiliki kunci dengan kata sandi. Saya memperbarui pertanyaan saya
pl1nk
1
Ok, saya tidak tahu mengapa Anda ingin melakukan ini dengan kata sandi. Biasanya konsep ini hanya digunakan untuk membuat koneksi dengan mesin jarak jauh yang dapat mengenali mesin Klien tanpa otentikasi. Jadi, jika tidak menginginkan skenario ini, yang perlu Anda lakukan hanyalah menjalankan koneksi ssh normal. Baik?
Octávio Filipe Gonçalves
1
Memberitahu orang untuk menyalin kunci publik mereka di atas otor_keys pada mesin jarak jauh agak kasar ... Jauh lebih baik adalah menggunakan perintah ssh-copy-id user @ remotemachine, yang akan digunakan untuk login kata sandi pertama kali dan kemudian APPEND tidak menimpa kuncinya.
Floyd