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

8

У меня проблема с использованием 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

Поэтому, чтобы это работало, я подключаюсь к серверу B через 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

Любые идеи?

Тони
источник
Простите за вопрос, но вы уверены, что он просит пароль? С тем, что вы показали выше, я ожидаю, что он будет запрашивать пароль для аутентификации sudoкоманды.
MadHatter
Я управлял файлом sudoers с помощью NOPASSWD для пользователя / команды, которую я пытаюсь запустить удаленно. Возможно, мне тоже нужно это уточнить. Он просит у меня пароль.
Тони
ОК, это имеет смысл; спасибо за разъяснения, я просто хотел убедиться, что нас не укусило очевидное!
MadHatter

Ответы:

1

Когда вы входите в систему, 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.

v25
источник
Что касается sshцепей, вы не правы. Я делаю это много раз в день; sshот хоста A к хосту B, затем к C, а затем к D, когда ssh-agent во главе выполняет все ключевые операции.
MadHatter
Насколько я понимаю, он не пытается соединиться от А до Б, используя агента. Сервер B настроен как клиент ssh-agent (для всех целей и задач), и когда он выполняется sudo -E /path/to/script.shна сервере B, что-то здесь требует парольной фразы. РЕДАКТИРОВАТЬ: Хотя, с учетом вашего комментария, для него может иметь смысл настроить A в качестве клиента агента и использовать переадресацию ssh-agent, что, в свою очередь, позволит ему выполнить сценарий на сервере B без запроса парольной фразы ,
v25
Хорошо, я попытаюсь настроить gpg-agent на сервере A. У вас есть информация о пересылке ssh-agent? Я видел этот пост до сих пор: superuser.com/questions/161973/…
Тони
Это хорошо задокументировано, вот руководство: livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25
v25, мои извинения, похоже, вы были правы. Тони, это никогда не сработает, если вы запустите агент на B, потому что соединение не является постоянным.
MadHatter