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?
sudo
perintah.Jawaban:
Ketika Anda login dengan
ssh user@serverB
secara 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.sh
Anda 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
sumber
ssh
rantai pergi, Anda salah. Saya melakukan ini berkali-kali sehari;ssh
dari host A ke host B, lalu ke C, dan kemudian ke D, dengan ssh-agent di kepala melakukan operasi utama sepanjang waktu.sudo -E /path/to/script.sh
di 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 .