Bagaimana saya bisa mengakses gantungan kunci dari jarak jauh dari baris perintah?

23

Saya menyimpan berbagai kata sandi (mis. Untuk server email jarak jauh) di gantungan kunci saya. Dari baris perintah, ketika masuk secara lokal, saya dapat mengambil ini melalui:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>

Namun, hasilnya tidak dapat dicapai ketika dijalankan dari jarak jauh (beralih ke kotak dari tempat lain):

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>

Selain itu, nilai kembali dari perintah terakhir (menggunakan -g) adalah 36.

Saya telah membuang output dari setlogin lokal dan membandingkannya dengan remote, dan variabel lingkungan yang hilang adalah:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

Apa yang saya lewatkan? Saya telah SSH_AUTH_SOCKmenetapkan ke nilai yang valid (dikembalikan dari ssh-agent).

Eter
sumber
Terkait: Akses Keychain Dari Shell
kenorb

Jawaban:

11

Dalam mereproduksi ini untuk diselidiki, saya perhatikan bahwa gantungan kunci saya telah dikonfigurasikan ke "Konfirmasi sebelum mengizinkan akses." Jadi ketika saya melakukan find-internet-passwordsecara lokal dengan -gbendera, saya mendapatkan kotak dialog yang menyatakan keamanan ingin menggunakan informasi rahasia Anda yang disimpan di "smtp. gmail.com ”di gantungan kunci Anda. Jika saya mengklik "Izinkan" maka itu berfungsi, jika saya mengklik "Tolak" itu gagal mirip dengan sshkasus ini, dengan kode pengembalian 51. Akses dialog konfirmasi

Ketika saya mencoba perintah dari jarak jauh ssh, -ghasil langsung gagal, dengan status 36yang Anda laporkan.

Saya menduga ini karena, ketika Anda sshmasuk, tidak ada cara bagi sistem untuk memunculkan kotak dialog yang memungkinkan Anda untuk mengonfirmasi bahwa Anda ingin mengizinkan securityperintah untuk mengakses informasi ini.

Saya bisa mendapatkan perintah untuk bekerja saat terhubung dengan sshdengan terlebih dahulu mengklik opsi "Selalu Bolehkan" ketika menjalankan perintah secara lokal. Ini memperbarui izin di Keychain sehingga saya tidak perlu lagi menanggapi dialog (bahkan secara lokal), yang memungkinkannya untuk bekerja dari jarak jauh juga.

Saya tidak tahu apakah ini akan sepenuhnya membantu Anda, karena saya pikir itu berarti Anda akan perlu terlebih dahulu memberikan securityakses program ke setiap item gantungan kunci yang mungkin ingin Anda akses dari jarak jauh. Dimungkinkan untuk menulis skrip untuk melakukan ini?

Jika Anda bereksperimen dengan ini secara manual dan kemudian ingin mencabut akses ini, Anda dapat pergi ke item yang terpengaruh di Akses Keychain, pilih Dapatkan Info dan lihat pada tab Kontrol Akses . Anda akan melihat entri untuk securitysana, yang dapat Anda hapus:Dialog Kontrol Akses

James Elliott
sumber
Saya telah melakukan hal yang sama - menambahkan perintah 'keamanan' ke daftar "selalu mengizinkan akses" (yang juga dilakukan dengan mengklik "Selalu izinkan" pada sembulan yang muncul saat mengeluarkan perintah secara lokal), tetapi saya masih tidak bisa akses item gantungan kunci dari jarak jauh setelahnya. Pasti ada pengaturan lain di suatu tempat yang perlu diubah, tetapi saya tidak dapat menemukannya.
Eter
1
ahahaha - ini benar - benar berfungsi, tetapi orang perlu masuk dengan sesi baru setelah mengubah pengaturan di Gantungan Kunci agar mereka berlaku. Hore! (Saya akan menambahkan jawaban untuk pertanyaan ini jika saya pernah mengetahui cara mengubah hak akses, dari jarak jauh, tetapi mengatur segalanya secara lokal terlebih dahulu untuk penggunaan jarak jauh berikutnya dapat diterima untuk saat ini.)
Ether
2
Perhatikan juga - penting juga untuk menjalankan security unlock-keychain ~/Library/Keychains/login.keychainsesi jauh di mana Anda mencoba menggunakan gantungan kunci. Ini akan meminta kata sandi Anda, jadi Anda tidak bisa melakukannya dalam skrip. Mungkin ada cara untuk mencapai hal ini tanpa kata sandi, tapi itu di luar cakupan pertanyaan ini :)
Ether
apakah ada yang tahu kalau saya bisa memasukkan kata sandi di baris perintah untuk keamanan membuka kunci-rantai?
tofutim
1
@ Lain-lain Jika gantungan kunci berada di /Users/[user]/Library/Keychains/jalur default, Anda dapat menghilangkan path lengkap dan pergi dengan adil login.keychain.
solgar
5

security -i unlock-keychain

bekerja untuk saya di MacOS 10.13.4 High Sierra.

Setelah menyelidiki solusi karthick, saya menemukan ini. -I membuat perintah interaktif dan meminta Anda di terminal untuk kata sandi Anda.

Matt Clapp
sumber
3

Selama gantungan kunci keamanan berada di lokasi default, Anda dapat menjalankan perintah di bawah ini untuk membukanya. Itu tidak meminta kata sandi. Itu bekerja dari jarak jauh.

security unlock-keychain -p "enter password"

karthick
sumber
Selamat Datang di Tanya Berbeda! Kami berusaha menemukan jawaban terbaik dan jawaban itu akan memberikan info pendukung mengapa mereka yang terbaik. Jawaban harus lengkap sehingga jelaskan mengapa menurut Anda jawaban yang Anda berikan akan menyelesaikan masalah atau lebih baik daripada orang lain di luar sana. Memberikan tautan sebagai informasi pendukung juga dapat membantu OP, dan lainnya, menemukan info tambahan untuk diri mereka sendiri. Lihat Cara Menjawab tentang cara memberikan jawaban yang berkualitas. - Dari Ulasan
fsb