Bagaimana cara menggunakan kunci pribadi SSH untuk masuk tanpa memasukkan frasa sandi setiap kali di Mac OS X Lion?

23

Saya menggunakan Mac OS X Lion dan login host jarak jauh melalui SSH setiap hari. Terlepas dari kenyataan bahwa saya menggunakan pasangan kunci SSH untuk otentikasi jarak jauh dan saya tidak perlu menggunakan frase login setiap host, masih sangat menjengkelkan bahwa terminal meminta frasa sandi untuk mengakses kunci pribadi SSH saya.

Untuk alasan keamanan, saya pikir, frasa sandi untuk mengakses kunci pribadi SSH harus diperlukan. Apakah ada cara yang membuat terminal untuk menanyakan frasa tepat hanya satu kali saat start up, lalu menghafalnya, dan secara otomatis menggunakan kunci pribadi saya di sesi SSH nanti?

Ada sebuah skrip bernama keychainyang berfungsi dengan baik di Gentoo Linux. Tapi saya tidak pernah mengetahuinya di Mac OS X Lion. Terlebih lagi, ada begitu banyak hal menakutkan, seperti ssh-agent, ssh-add. Setelah membaca berbagai bahan tentang toolkit SSH dan melakukan beberapa percobaan yang frustrasi, saya menjadi lebih bingung.

Karena itu, saya datang ke StackExchange, mencari beberapa saran tentang pertanyaan-pertanyaan berikut.

  1. Apa ssh-agent, ssh-add, keychain, Keychain Access.appdan bagaimana mereka berinteraksi satu sama lain?
  2. Bagaimana saya bisa memasukkan frasa sandi untuk kunci pribadi SSH saya satu kali saat masuk, dan menggunakannya secara bebas pada pembuatan sesi SSH nanti?
  3. Errr ... Ada apa dengan itu Keychain Access.app? Itu tidak menyimpan frasa SSH seperti sebelumnya.

Saya mencantumkan apa yang telah saya lakukan di sini. Semoga ada petunjuk tentang langkah-langkah yang saya lewatkan.

Langkah 1. Buat pasangan kunci SSH di Mac saya.

$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.

Langkah 2. Salin kunci publik SSH saya ke host jarak jauh. Untuk mengambil contoh, saya menyalin kunci ke localhost, Mac.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Langkah 3. Kemudian coba sambungkan ke host jarak jauh (localhost di sini), melalui otentikasi pasangan kunci SSH.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Langkah 4. Logout dari host jarak jauh dan coba sambungkan lagi. Sialan, terminal meminta frase SSH lagi.

Pertanyaan yang sering diajukan adalah "Apakah ssh-agent bekerja dengan baik di Mac Anda?". Terus terang, saya tidak tahu apa yang terjadi pada hal-hal ini. Di sini menunjukkan beberapa hasil yang berjalan.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Setiap umpan balik disambut. Terima kasih!

Jianwen W.
sumber
Terkait . Kemungkinannya adalah Anda dapat mengadaptasi jawaban yang diterima untuk kasus penggunaan Anda.
Daniel Beck

Jawaban:

12

ssh-agentadalah bagian yang ingin Anda kerjakan, karena ia melakukan apa yang Anda tanyakan. Agen berjalan sebagai daemon, dan ketika Anda "menambahkan" kunci pribadi untuk itu, ia mengingat kunci itu dan secara otomatis menyediakannya ke remote sshdselama koneksi awal. ( ssh-addhanyalah perintah yang Anda jalankan untuk secara manual menambahkan kunci pribadi ssh-agent).

Di OS X, pada Leopard, Anda tidak perlu menjalankan ssh-agentatau ssh-addsecara manual. Seharusnya "terjadi begitu saja" ketika Anda mencoba terhubung ke server. Sekali per kunci, ia akan meminta Anda dengan dialog kata sandi UI, yang (antara lain) akan memungkinkan Anda untuk menambahkan kunci secara otomatis ssh-agentsehingga Anda tidak pernah diminta lagi.

Ini ditangani dengan memiliki launchdkonfigurasi yang mendengarkan koneksi pada $SSH_AUTH_SOCKsoket, dan secara otomatis diluncurkan ssh-agentketika pertama kali perlu; setelah itu, ssh-agentmeminta Anda untuk kredensial hanya ketika perlu membuka kunci baru.

Jika itu tidak berhasil, pastikan Anda memiliki launchdfile konfigurasi yang benar :

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Jika itu masih tidak bekerja untuk Anda karena beberapa alasan, inilah cara "lama" untuk menjalankan sesuatu dengan tangan:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

Ada juga aplikasi ini, yang telah saya hentikan sejak Leopard keluar tetapi pada dasarnya melakukan hal yang sama pada versi Mac OS X sebelumnya:

http://www.sshkeychain.org/

KutuluMike
sumber
4
Terima kasih, Michael Edenfield. Saya menemukan apa yang salah dan sekarang ssh-login-without-passphrase berfungsi dengan baik di Mac OS X Lion. Saya melakukan beberapa hal bodoh - saya membuat tautan simbolis yang ~/tmpmenunjuk ke /tmp/dan menjalankan tugas cron untuk membersihkan ~/tmpsetiap 2 jam, yang juga melepas soket ssh-agent. Ya ampun, aku membenci diriku sendiri.
Jianwen W.
13

Selama proses menyelesaikan "masalah", aku googled beberapa topik terkait dan menuliskan beberapa catatan tentang bagaimana ssh-agent, ssh-add, keychain, KeyChain Access.appkerja. Akhirnya ternyata masalah ini sama sekali bukan masalah, sebaliknya masalahnya semua tentang saya, dan yang disebut ssh-login-tanpa-meminta-passphrase-setiap-waktu bekerja dengan sempurna di Mac out of box.

Namun, proses ini memberi saya beberapa pengalaman. Saya menuliskan catatan saya di sini dengan harapan mereka membantu orang yang bingung tentang istilah-istilah itu.

Dua istilah kata sandi:

  • passphrase mengacu pada frasa yang diperlukan saat mengakses kunci pribadi SSH Anda.
  • password merujuk pada frasa yang diperlukan untuk masuk ke Mac Anda.

Sekarang aku tahu apa toolkit ini lakukan, yaitu, ssh-agent, ssh-add, keychain, Keychain Access.appdi Mac.

  • ssh-agentadalah layanan penting untuk mengaktifkan menggunakan kunci pribadi SSH tanpa mengetikkan frasa sandi SSH. ssh-agentbekerja dengan cara ini. Pertama menyimpan, atau cache , kunci pribadi SSH Anda di memori utama. Kemudian di lain waktu dalam sesi ini ketika kunci SSH pribadi SSH Anda diperlukan untuk otentikasi jarak jauh, ssh-agentakan menemukan kunci pribadi Anda di memori utama dan menyerahkannya ke proses jarak jauh. Satu-satunya kesempatan Anda diminta untuk mengetikkan frasa sandi SSH Anda adalah ketika kunci pribadi Anda ditambahkan pada ssh-agentawalnya.
  • ssh-addadalah bagian dari ssh-agentkoleksi, yang membantu mengelola kunci SSH Anda ssh-agent. Kami menggunakan ssh-addperintah untuk mendaftar, menambah, menghapus kunci pribadi di keyring ssh-agent. Kemudian ssh-addberkomunikasi dengan ssh-agentlayanan untuk memenuhi tugas.
  • keychainadalah skrip untuk menemukan ssh-agentlayanan (jika tidak ada, mulai yang baru) dan panggil ssh-adduntuk menambahkan kunci pribadi SSH. keychainmemiliki ide yang sederhana dan mudah, bekerja dengan baik di Linux di mana ssh-agent biasanya tidak memulai secara otomatis.
  • Keychain Access.apptampaknya menjadi komponen yang paling rumit. Ini adalah layanan penyimpanan token universal Mac OS X. Ini menyimpan berbagai token, seperti kata sandi, sertifikat, dan lain-lain, dan berfungsi sebagai agen token untuk aplikasi yang meminta token tersebut. Dalam kasus kunci privat SSH kami, pertama ia memahami permintaan untuk mengakses kunci privat SSH dan muncul jendela untuk meminta Anda menyimpan frasa sandi SSH, yang merupakan semacam token, ke Keychain Access.appdalam keyring. Kemudian lain kali ketika Anda akan menggunakan kunci pribadi untuk otentikasi, Keychain Access.appmuncul jendela lagi, menanyakan apakah memberikan hak istimewa. Setelah mendapat jawaban ya, keychain Access.apptambahkan kunci pribadi Anda ke ssh-agentdalam penyimpanan.

Dua hal yang patut Anda perhatikan:

  1. Mac OS X Lion secara otomatis memulai ssh-agentlayanan saat start up, mendengarkan pada soket di bawah /tmp.
  2. Keychain Access.appmenyimpan kata sandi SSH Anda, sehingga dapat menambahkan kunci pribadi Anda ssh-agenttanpa mengganggu Anda. Ya, tidak perlu mengetikkan frase SSH Anda, tetapi perlu mengetikkan kata sandi login akun Mac Anda untuk memberikan hak istimewa saat membuat entri ini untuk pertama kalinya.

Jadi, secara ringkas, SSH-login-tanpa-meminta-frasa sandi harus berfungsi pada Mac OS X di luar kotak.

Jianwen W.
sumber
1

Jika solusi lain di sini tidak bekerja untuk orang, yang berikut ini berhasil untuk saya.

Untuk setiap dan setiap kunci pribadi di direktori ~ / .ssh Anda, pastikan bahwa kunci publik yang sesuai juga ada. Pastikan kunci publik dinamai persis sama dengan kunci pribadi tetapi dengan .pubdi akhir. Jika Anda sudah memiliki kunci publik yang sesuai, coba buat ulang.

Jika Anda perlu membuat ulang kunci publik, Anda dapat melakukannya dengan mudah: -

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

mengganti my_keydengan apa pun kunci Anda dipanggil.

Setelah itu, MacOS mengingat kata sandi kunci dalam gantungan kunci sebagaimana mestinya.

Catatan - memasukkan frasa sandi dan menyimpannya di gantungan kunci sekarang merupakan tindakan satu kali saja (tidak satu kali per sesi login seperti yang diinginkan OP), tetapi dengan asumsi login ke mac yang bersangkutan dilindungi kata sandi, maka frasa sandi Anda dilindungi oleh kata sandi login tersebut. Juga, solusi ini tidak masuk akal bagi saya ... kunci publik seharusnya tidak diperlukan selain kunci pribadi, tetapi untuk beberapa alasan MacOSX membutuhkannya.

(berasal dari jawaban untuk pertanyaan serupa di Apple Stack Exchange)

rowatt
sumber
1

Satu hal yang saya jarang menemukan disebutkan mengenai mengkonfigurasi ~/.sshfolder adalah membatasi izin direktori.

Untuk mengaktifkan ssh untuk menghindari meminta kata sandi, saya selalu harus mengatur izin direktori home pengguna 700, dan ~/.sshizin folder 700juga.

Kalau tidak, ia terus meminta saya kata sandi bahkan ketika saya memiliki semua kunci yang dihasilkan dan disalin dengan benar. Pesan kesalahan akan dihasilkan dalam log otentikasi tetapi ini tidak terlihat oleh pengguna akhir untuk sebagian besar.

Don Wood
sumber
0

Hal lain yang bisa Anda coba adalah mengganti ssh-copy-iddengan sesuatu seperti k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2".

Lri
sumber
0

Jawaban ini sedikit bukan solusi untuk pertanyaan ini; Namun sangat dekat (saya berakhir pada pertanyaan ini saat mencari solusi untuk masalah saya).

Saya juga melakukan banyak SSH ke server jarak jauh di Mac saya, seperti yang dijelaskan dalam pertanyaan ini, namun Keychain Access.appaplikasi menyimpan frasa kunci dan saya tidak perlu mengetiknya setiap kali saya perlu kunci untuk mengotentikasi pada server SSH.

Namun, saya mengaktifkan server SSH di Mac saya, sehingga saya dapat terhubung dengannya dari jarak jauh. Ketika login dari Mac saya dari jarak jauh, kata kunci selalu ditanya ketika saya ingin SSH menjadi host lain.

Saya menemukan solusi yang memungkinkan frasa kunci disimpan untuk sesi saat ini. Saya pikir ini bisa bermanfaat bagi seseorang, maka posting / jawaban ini.

Benoit Duffez
sumber
Saya menuliskan solusi serupa saya di sini superuser.com/a/659668/154113
orkoden
0

Saya sudah bingung dengan masalah ini. ssh bekerja untuk setiap mesin di departemen kami KECUALI untuk apel (MacBook atau iMac tidak masalah). Saya akhirnya bosan mengetik kata sandi dan memutuskan untuk men-debug ini.

Saya pergi ke iMac dan menonaktifkan sshd di panel preferensi berbagi. Saya kemudian menuntut untuk melakukan root, dan mengetik "/ usr / sbin / sshd -d" untuk menjalankan sshd dalam mode debug. Saya kemudian mencoba untuk ssh ke mesin itu dan segera mencoba menggunakan protokol 2, yang semuanya tampaknya baik-baik saja, tetapi sshd segera melaporkan bahwa ia tidak dapat menemukan "berwenang_kunci". Saya punya file Authorized_keys2 bahwa semua linux saya, solaris, Anda-nama-itu kotak unix menerima dengan baik. Saya cukup menyalin berwenang_keys2 ke otor_keys dan BOOM. Bekerja dengan baik sekarang.

Mengapa * kunci bukan * kunci2 tidak diketahui. Terutama ketika os x cukup senang dengan known_hosts2.

Dalam kasus apa pun, sekarang semua kotak apel kami dapat masuk, atau menjalankan perintah jarak jauh tanpa menggunakan kata sandi sembur: prompt ...

Bob Hyatt
sumber