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 keychain
yang 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.
- Apa
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
dan bagaimana mereka berinteraksi satu sama lain? - Bagaimana saya bisa memasukkan frasa sandi untuk kunci pribadi SSH saya satu kali saat masuk, dan menggunakannya secara bebas pada pembuatan sesi SSH nanti?
- 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!
Jawaban:
ssh-agent
adalah 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 remotesshd
selama koneksi awal. (ssh-add
hanyalah perintah yang Anda jalankan untuk secara manual menambahkan kunci pribadissh-agent
).Di OS X, pada Leopard, Anda tidak perlu menjalankan
ssh-agent
ataussh-add
secara 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 otomatisssh-agent
sehingga Anda tidak pernah diminta lagi.Ini ditangani dengan memiliki
launchd
konfigurasi yang mendengarkan koneksi pada$SSH_AUTH_SOCK
soket, dan secara otomatis diluncurkanssh-agent
ketika pertama kali perlu; setelah itu,ssh-agent
meminta Anda untuk kredensial hanya ketika perlu membuka kunci baru.Jika itu tidak berhasil, pastikan Anda memiliki
launchd
file konfigurasi yang benar :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/
sumber
~/tmp
menunjuk ke/tmp/
dan menjalankan tugas cron untuk membersihkan~/tmp
setiap 2 jam, yang juga melepas soket ssh-agent. Ya ampun, aku membenci diriku sendiri.Selama proses menyelesaikan "masalah", aku googled beberapa topik terkait dan menuliskan beberapa catatan tentang bagaimana
ssh-agent
,ssh-add
,keychain
,KeyChain Access.app
kerja. 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.app
di Mac.ssh-agent
adalah layanan penting untuk mengaktifkan menggunakan kunci pribadi SSH tanpa mengetikkan frasa sandi SSH.ssh-agent
bekerja 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-agent
akan 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 padassh-agent
awalnya.ssh-add
adalah bagian darissh-agent
koleksi, yang membantu mengelola kunci SSH Andassh-agent
. Kami menggunakanssh-add
perintah untuk mendaftar, menambah, menghapus kunci pribadi di keyring ssh-agent. Kemudianssh-add
berkomunikasi denganssh-agent
layanan untuk memenuhi tugas.keychain
adalah skrip untuk menemukanssh-agent
layanan (jika tidak ada, mulai yang baru) dan panggilssh-add
untuk menambahkan kunci pribadi SSH.keychain
memiliki ide yang sederhana dan mudah, bekerja dengan baik di Linux di mana ssh-agent biasanya tidak memulai secara otomatis.Keychain Access.app
tampaknya 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, keKeychain Access.app
dalam keyring. Kemudian lain kali ketika Anda akan menggunakan kunci pribadi untuk otentikasi,Keychain Access.app
muncul jendela lagi, menanyakan apakah memberikan hak istimewa. Setelah mendapat jawaban ya,keychain Access.app
tambahkan kunci pribadi Anda kessh-agent
dalam penyimpanan.Dua hal yang patut Anda perhatikan:
ssh-agent
layanan saat start up, mendengarkan pada soket di bawah/tmp
.Keychain Access.app
menyimpan kata sandi SSH Anda, sehingga dapat menambahkan kunci pribadi Andassh-agent
tanpa 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.
sumber
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
.pub
di akhir. Jika Anda sudah memiliki kunci publik yang sesuai, coba buat ulang.Jika Anda perlu membuat ulang kunci publik, Anda dapat melakukannya dengan mudah: -
mengganti
my_key
dengan 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)
sumber
Satu hal yang saya jarang menemukan disebutkan mengenai mengkonfigurasi
~/.ssh
folder adalah membatasi izin direktori.Untuk mengaktifkan ssh untuk menghindari meminta kata sandi, saya selalu harus mengatur izin direktori home pengguna
700
, dan~/.ssh
izin folder700
juga.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.
sumber
Hal lain yang bisa Anda coba adalah mengganti
ssh-copy-id
dengan sesuatu sepertik="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"
.sumber
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.app
aplikasi 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.
sumber
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 ...
sumber