Menggunakan gpg-agent lebih dari ssh

8

Saya mengalami masalah menggunakan agen gpg melalui ssh melalui baris perintah tunggal.

Ini konfigurasi saya:

Server A: memicu perintah melalui ssh.

ssh user@serverB "sudo -E /path/to/script.sh"

Server B: Menjalankan skrip yang membutuhkan tanda tangan frasa sandi.

Info sistem: Ubuntu 12.04

Saya telah menyiapkan gpg-agent di server B, saya telah menambahkan konfigurasi ini ke /home/user/.bashrc:

Invoke GnuPG-Agent the first time we login.                                                                          
# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?                                    
if test -f $HOME/.gpg-agent-info && \
    kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
    GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
else
    # No, gpg-agent not available; start gpg-agent                                                                     
    eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
fi
export GPG_TTY=`tty`
export GPG_AGENT_INFO

Berikut adalah konfigurasi agen di /home/user/.gnupg/gpg-agent.conf:

enable-ssh-support
#1 year cache support
default-cache-ttl 31536000
default-cache-ttl-ssh 31536000
max-cache-ttl 31536000
max-cache-ttl-ssh 31536000
#debug-all

Jadi untuk membuat ini berfungsi, saya terhubung ke serverB melalui ssh:

ssh user@serverB

Agen gpg dimulai, saya memicu skrip secara manual:

sudo -E /path/to/script.sh

Kemudian, agen gpg meminta saya meminta frasa sandi, setelah saya mengatur frasa sandi, saya dapat menjalankan skrip lagi, dan ia melakukan tugasnya tanpa meminta passhrase.

Masalah saya adalah, ketika saya mencoba memicunya dari kejauhan, misalnya melalui:

ssh user@serverB "sudo -E /path/to/script.sh"

Tampaknya agen gpg tidak berfungsi, karena skrip terus meminta saya untuk frasa sandi.

Edit:

Saya telah menambahkan konten berikut ke /etc/sudoers.d/user untuk memicu skrip dari kejauhan tanpa kata sandi sudo dan untuk menjaga variabel lingkungan:

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh

Ada ide?

Tony
sumber
Maafkan pertanyaannya, tetapi apakah Anda yakin itu meminta frasa sandi? Dengan apa yang telah Anda perlihatkan di atas, saya berharap akan meminta kata sandi , untuk mengotentikasi sudoperintah.
MadHatter
Saya telah mengelola file sudoers dengan NOPASSWD untuk pengguna / perintah yang saya coba jalankan dari jauh. Saya mungkin perlu mengatur ini juga. Itu meminta saya untuk frasa sandi.
Tony
Oke, itu masuk akal; terima kasih telah mengklarifikasi, saya hanya ingin memastikan kami tidak digigit oleh yang jelas!
MadHatter

Jawaban:

1

Ketika Anda login dengan ssh user@serverBsecara manual jalankan script itu akan meminta Anda untuk frasa sandi pertama kali, maka ketika Anda mengeksekusi skrip shh-agent akan memberikan frasa sandi yang tersimpan.

Namun ketika Anda menjalankan ssh user@serverB "sudo -E /path/to/script.shAnda melakukan login baru setiap kali, dan saya tidak berpikir ssh-agent akan mendukung menyelamatkan kata sandi dari login SSH yang terpisah.

Keychain tampaknya melakukan apa yang Anda butuhkan: http://www.funtoo.org/Keychain

Dengan gantungan kunci, Anda hanya perlu memasukkan frasa sandi setiap kali mesin lokal Anda dinyalakan ulang. Keychain juga memudahkan pekerjaan cron jarak jauh untuk secara aman "menghubungkan" ke proses ssh-agent yang berjalan lama, memungkinkan skrip Anda untuk mengambil keuntungan dari login berbasis kunci.

Versi gantungan kunci saat ini mendukung gpg-agent serta ssh-agent.

v25
sumber
Sejauh sshrantai pergi, Anda salah. Saya melakukan ini berkali-kali sehari; sshdari host A ke host B, lalu ke C, dan kemudian ke D, dengan ssh-agent di kepala melakukan operasi utama sepanjang waktu.
MadHatter
Pemahaman saya adalah bahwa dia tidak mencoba terhubung dari A ke B menggunakan agen. Server B diatur sebagai klien ssh-agent (untuk semua maksud dan tujuan) dan ketika ia mengeksekusi sudo -E /path/to/script.shdi server B, sesuatu di sini memerlukan kata sandi. EDIT: Meskipun, dengan komentar Anda dalam pikiran, mungkin lebih masuk akal baginya untuk mengkonfigurasi A sebagai klien agen, dan menggunakan penerusan ssh-agent yang memungkinkannya untuk mengeksekusi skrip di server B tanpa meminta frasa sandi .
v25
Oke, saya akan mencoba mengatur gpg-agent di server A. Anda mendapat informasi tentang penerusan ssh-agent? Saya telah melihat posting ini sejauh ini: superuser.com/questions/161973/…
Tony
Ini didokumentasikan dengan baik, inilah panduannya: livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25
v25, permintaan maaf saya, sepertinya Anda benar. Tony, itu tidak akan pernah berhasil jika Anda menjalankan agen di B, karena koneksi tidak persisten.
MadHatter