Использование 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.


Что касается 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.