У меня проблема с использованием 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
команды.Ответы:
Когда вы входите в систему,
ssh user@serverB
затем выполняете сценарий вручную, он запрашивает у вас парольную фразу в первый раз, затем при запуске сценария shh-agent предоставит сохраненную ключевую фразу.Однако, когда вы запускаете,
ssh user@serverB "sudo -E /path/to/script.sh
вы каждый раз создаете новый логин, и я не думаю, что ssh-agent будет поддерживать сохранение ключевой фразы через отдельные логины SSH.Брелок для ключей, кажется, делает то, что вам нужно: http://www.funtoo.org/Keychain
источник
ssh
цепей, вы не правы. Я делаю это много раз в день;ssh
от хоста A к хосту B, затем к C, а затем к D, когда ssh-agent во главе выполняет все ключевые операции.sudo -E /path/to/script.sh
на сервере B, что-то здесь требует парольной фразы. РЕДАКТИРОВАТЬ: Хотя, с учетом вашего комментария, для него может иметь смысл настроить A в качестве клиента агента и использовать переадресацию ssh-agent, что, в свою очередь, позволит ему выполнить сценарий на сервере B без запроса парольной фразы ,