Saya gunakan gpg-agent
untuk mengelola kedua identitas PGP e SSH. Agen dimulai dengan skrip seperti ini
gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"
export GPG_TTY="$(tty)"
if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
source "$gpg_agent_env" 2> /dev/null
fi
yang bersumber setiap kali saya menjalankan shell interaktif. Semuanya berfungsi dengan baik dengan pengaturan ini tetapi ada masalah. Katakanlah saya:
- buka terminal (meluncurkan agen di latar belakang) dan mulai bekerja
- setelah beberapa saat buka terminal kedua
- lakukan tindakan yang mengharuskan Anda memasukkan frasa sandi di terminal kedua
Pada titik ini gpg-agent
akan mulai pinentry-curses
mendorong frasa sandi tetapi akan melakukan ini di terminal pertama yang menghasilkan output yang bercampur dengan apa pun yang sedang berjalan (biasanya editor teks) tanpa ada cara untuk melanjutkan program atau menghentikan pinentry (mulai menggunakan cpu 100% dan saya harus membunuhnya).
Saya pasti melakukan sesuatu yang salah di sini. Adakah yang pernah mengalami ini?
Memperbarui:
Saya tahu ini terjadi hanya untuk prompt untuk membuka kunci SSH, yang terlihat seperti ini , sementara meminta kunci PGP selalu terbuka pada tty yang benar (yaitu saat ini).
export GPG_TTY="$(tty)"
yang diperbaiki untuk sayaJawaban:
The Halaman gpg-agent pria menjelaskan di bawah opsi
--enable-ssh-support
bahwa protokol agen ssh tidak mampu memberikan nama tty ke agen, jadi default untuk menggunakan terminal awal itu dimulai pada. Sebelum menjalankan perintah ssh yang membutuhkan frasa sandi di terminal baru yang harus Anda ketikdi terminal baru untuk memperbarui pandangan agen yang tty atau tampilan untuk digunakan.
sumber
gpg2
tidak memiliki konsep bagaimana rasanya memiliki alur kerja / gaya hidup yang terpusat pada command-line-centric. Entah bagaimana orang-orang yang konsep dasarnya tentang pengalaman pengguna komputer tipikal dimulai dan berakhir dalam batas-batas jendela GUI harus membuat keputusan yang mempengaruhi alat yang sebelumnya dapat digunakan dengan nyaman pada command-line.gpg
tidak pernah dapat meminta kata sandi pada terminal yang salah, sedangkangpg2
dengan mudah bisa. Thegpg
perintah akan selalu meminta frasa sandi pada terminal Anda dieksekusi perintah dari karena benar-benar menciptakan kata sandi itu dilakukan dari yang pohon proses. Tapigpg2
dikodekan sedemikian rupa sehingga tidak dapat memastikan bahwa, karena memiliki meminta proses agen berjalan lama terpisah untuk cepat untuk passphrase, dan bahwa agen mungkin awalnya dimulai pada terminal yang berbeda.gpg2
dan agen bisa, tetapi tidak, diberi kode untuk mengatasi itu.gpg2
desain hanya masuk akal jika dilaksanakan oleh orang yang tidak grok aspek CLI-relevan tentang bagaimana Linux / Unix bekerja, dan tidak memiliki rasa yang baik dari apa yang membuat antarmuka dan perkakas baik untuk menyusun dalam kombinasi yang sewenang-wenang.Sesuai bug hulu terhadap openssh, cara yang tepat untuk ini adalah menambahkan yang berikut ke Anda
~/.ssh/config
:Sejauh ini, ini berhasil bagi saya.
sumber
GPG_TTY
harus diatur$(tty)
untuk membuat ini berfungsi.