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 set
login 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_SOCK
menetapkan ke nilai yang valid (dikembalikan dari ssh-agent
).
Jawaban:
Dalam mereproduksi ini untuk diselidiki, saya perhatikan bahwa gantungan kunci saya telah dikonfigurasikan ke "Konfirmasi sebelum mengizinkan akses." Jadi ketika saya melakukan
find-internet-password
secara lokal dengan-g
bendera, 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 denganssh
kasus ini, dengan kode pengembalian51
.Ketika saya mencoba perintah dari jarak jauh
ssh
,-g
hasil langsung gagal, dengan status36
yang Anda laporkan.Saya menduga ini karena, ketika Anda
ssh
masuk, tidak ada cara bagi sistem untuk memunculkan kotak dialog yang memungkinkan Anda untuk mengonfirmasi bahwa Anda ingin mengizinkansecurity
perintah untuk mengakses informasi ini.Saya bisa mendapatkan perintah untuk bekerja saat terhubung dengan
ssh
dengan 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
security
akses 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
security
sana, yang dapat Anda hapus:sumber
security unlock-keychain ~/Library/Keychains/login.keychain
sesi 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 :)/Users/[user]/Library/Keychains/
jalur default, Anda dapat menghilangkan path lengkap dan pergi dengan adillogin.keychain
.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.
sumber
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"
sumber