Назад | Перейти на главную страницу

Использование gpg-agent поверх ssh

У меня проблема с использованием gpg-agent через ssh через одну командную строку.

Вот моя конфигурация:

Сервер A: запуск команды через ssh.

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

Сервер B: выполнение сценария, требующего подписи парольной фразы.

Информация о системе: Ubuntu 12.04

Я установил gpg-agent на сервере B, я добавил эту конфигурацию в /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

Вот конфигурация агента в /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

Итак, чтобы это работало, я подключаюсь к serverB через ssh:

ssh user@serverB

Запускается gpg-agent, запускаю вручную скрипт:

sudo -E /path/to/script.sh

Затем gpg-agent запрашивает парольную фразу. После того, как я установил парольную фразу, я могу снова запустить скрипт, и он выполнит свою задачу, не запрашивая парольную фразу.

Моя проблема в том, что когда я пытаюсь запустить его удаленно, например через :

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

Кажется, что gpg-agent не работает, потому что скрипт все время спрашивает у меня кодовую фразу.

Редактировать:

Я добавил следующий контент в /etc/sudoers.d/user, чтобы запускать скрипт удаленно без пароля sudo и сохранить переменные среды:

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

Любые идеи?

Когда вы входите в систему с ssh user@serverB затем вручную выполните скрипт, он запросит у вас парольную фразу в первый раз, затем, когда вы запустите скрипт, shh-agent предоставит сохраненную парольную фразу.

Однако когда вы бежите ssh user@serverB "sudo -E /path/to/script.sh вы каждый раз выполняете новый вход в систему, и я не думаю, что ssh-agent будет поддерживать сохранение парольной фразы для отдельных входов SSH.

Связка ключей, похоже, делает то, что вам нужно: http://www.funtoo.org/Keychain

При использовании связки ключей вам нужно вводить кодовую фразу только один раз при каждой перезагрузке вашего локального компьютера. Связка ключей также упрощает безопасное "подключение" удаленных заданий cron к длительному процессу ssh-agent, позволяя вашим скриптам использовать преимущества входа на основе ключей.

Текущая версия связки ключей поддерживает gpg-agent, а также ssh-agent.