Pintyry curses'ları doğru tty'ye nasıl başlatabilirim?


13

Her gpg-agentiki PGP e SSH kimliğini yönetmek için kullanıyorum . Temsilci böyle bir komut dosyasıyla başlatılır

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

bu etkileşimli bir kabuk çalıştırdığımda elde edilir. Bu kurulumda her şey iyi çalışıyor ancak bir sorun var. Diyelim ki:

  1. bir terminal açın (aracıyı arka planda başlatın) ve çalışmaya başlayın
  2. bir süre sonra ikinci bir terminal açın
  3. ikinci terminalde parola girilmesini gerektiren bir işlem yapın

Bu noktada bir parola sormaya gpg-agentbaşlayacaktır, pinentry-cursesancak bunu ilk terminalde gerçekleştirecektir, bu da çıktıyı çalışmakta olan her şeyle (genellikle bir metin düzenleyici) karıştırmaya neden olur ve programı sürdürmek veya pinentry'yi durdurmak mümkün değildir (% 100 cpu kullanmaya başlar) ve öldürmek zorundayım).

Burada yanlış bir şey yapmalıyım. Bunu yaşayan var mı?

Güncelleme:

Ben bir istem bir SSH anahtarı gibi görünüyor kilidini için bu yalnızca olur anladım bu doğru (yani akım) uçbirimlerden ise PGP anahtarları için istemleri her zaman açık.


Aracıyı giriş kabuğunuzdan başlatmayı denediniz, bu yüzden sadece çalışan var mı?
jasonwryan

@jasonwryan Az önce denedim: Linux sanal terminalleri için de aynı şey (agetty). Bu arada terminal ile ilgili soruda bir terminal emülatör penceresi kastedildi.
Rnhmjoj

1
Benim için export GPG_TTY="$(tty)"düzeltti
naisanza

Yanıtlar:


11

Gpg-agent man sayfası seçeneği altında açıklar --enable-ssh-supportssh ajan protokolü varsayılan bu yüzden başlatıldı orijinal terminalini kullanarak, aracıya tty'nin adını sağlayamadığı olduğunu. Bir gerektirir SSH komutu çalıştırmadan önce yazmanız gereken yeni bir terminalde parola

gpg-connect-agent updatestartuptty /bye

hangi terminalin veya tty'nin kullanılacağını görmek için yeni terminalde.


2
Bu cevap, bu gerçekleşmeyi tamamen anlamama yardımcı oldu: Sorumlu kişilerin gpg2, komut satırı merkezli bir iş akışı / yaşam tarzına sahip olmanın nasıl bir şey olduğuna dair bir fikri yok. Bir şekilde temel bir bilgisayar kullanıcı deneyimi konsepti temel olarak GUI pencereleri sınırları içinde başlayıp biten insanlar, daha önce komut satırında rahatça kullanılabilen bir aracı etkileyen kararlar almak zorunda kaldılar.
mtraceur

2
@mtraceur Gerçekten değil, ssh-agent burada hatalı: aslında gpg2 bir PGP anahtarının kilidini açarken doğru tty'de istemi gösterecektir. Farklı bir tty'ye geçmeyi hiç düşünmemiş olan ssh-agent'tan sorumlu olanlar.
Rnhmjoj

3
@Rnhmjoj SSH adamları, Unix / Linux tarihinin çoğu için hiçbir komut satırı aracının istemediği bir TTY anahtarlamalı kullanıcı tabanını desteklemeli miydi? Tasarım düşünme sürecinin ve iş akışının tam olarak hangi kısmının komut tarafından ve hangi ajan tarafından ele alındığına ilişkin kararların nasıl yapıldığını biliyor musunuz? Eğer öyleyseniz , belki de eksik olduğum bir şeyi görmeme yardımcı olabilirsiniz, çünkü mimarın dikkate alınmadan karar verilmedikçe, ajanın TTY'leri "değiştirmesi" için ne kadar çok ihtiyaç duyduğuna dair net bir yol göremiyorum. tipik komut satırı kullanımı ve iş akışları.
mtraceur

1
@ArneBabenhauserheide Aradaki fark, gpgyanlış terminalde asla parola istemeyebilir, oysa gpg2kolayca yapabilirsiniz. gpgKomut her zaman terminali üzerinde parola isteyeceğini gelen komutu yürütür aslında dan yapıldığını parola oluşturma çünkü o süreç ağacının. Ancak gpg2, bunu sağlayamayacak şekilde kodlanmıştır, çünkü parolayı sormak için ayrı bir uzun süredir çalışan ajan işlemi istemesi gerekir ve bu ajan başlangıçta farklı bir terminalde başlamış olabilir. gpg2ve ajan, bu soruna geçici bir çözüm bulmak için kodlanmış olabilirdi, ancak değildi.
mtraceur

1
@ArneBabenhauserheide SSH aracısı ile gpg2 arasındaki farkı sormadığınız sürece? Böylece, o zaman fark olması durumunda SSH (proaktif arka planda anahtar uçlarına spesifik aracısı anlatmak zorunda diğer aletlerin bu sapıklığa gerekli asla Çünkü bildiğim kadarıyla - ve sonra yaptıysam aynı eleştiriler var bunun da ). gpg2Linux / Unix nasıl çalıştığını CLI-ilgili yönlerini grok yoktur ve keyfi kombinasyonlarda beste için arayüzleri ve takım iyi kılan aldığını iyice olmayan kişiler tarafından uygulanan eğer tasarım sadece mantıklı.
mtraceur

5

Gereğince memba hata Openssh'ın karşı, doğru bu yolu adresinden Müşteri aşağıdakileri ekliyor ~/.ssh/config:

Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

Bu benim için şimdiye kadar mükemmel çalıştı.


1
Bunun çalışması GPG_TTYiçin ayarlanması gerektiğini unutmayın $(tty).
Peter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.