ssh SendEnv не работает при использовании с -J (хост перехода)?

Изменить: подсказка по перезапуску ssh после редактирования /etc/ssh/sshd_config решила мою проблему (sudo systemctl restart ssh.serviceв Ubuntu), но посмотрите принятый ответ, где вы найдете гораздо больше полезной информации по устранению неполадок.

Оригинал:

У меня есть сервер, к которому я подключаюсь через хост перехода:

      export MY_ENV=myvalue
ssh -o StrictHostKeyChecking=yes -o SendEnv=MY_ENV -J <myuser@jumpHostIp> <myuser@hostIp>

И хост перехода, и хост имеют в своем /etc/ssh/sshd_config:

      AcceptEnv MY_ENV

И хост перехода, и хост имеют в своих /home/myuser/.ssh/authorized_keys ключ ssh, ограничивающий myuser сценарием развертывания:

      command=/home/myuser/deploy.sh ...rest of public key...

Внутри этого файла Deploy.sh я хотел бы использовать $MY_ENV, однако это не работает.

При использовании хоста перехода каким-то образом теряется значение MY_ENV, передаваемое SendEnv? Если да, так ли это и как я могу получить доступ к значению MY_ENV в Deploy.sh на хосте?

1 ответ

Изменить: я уточнил детали, рассмотренные в ходе нашего итерационного процесса, частично дублируя некоторые детали, уже упомянутые в вопросе, для лучшего общего использования.


На странице руководства ssh указано:

Обратите внимание, что директивы конфигурации, представленные в командной строке, обычно применяются к целевому хосту, а не к каким-либо указанным хостам перехода. Используйте ~/.ssh/config для указания конфигурации хостов перехода.

Таким образом, ваш конечный пункт назначения получит опции, добавленные-o. Поскольку параметры не затрагиваются хостом перехода, нет необходимости настраивать хост перехода для передачи переменных на хост назначения.

Конфигурация sshd на целевом сервере

В качестве предварительного условия служба sshd целевого хоста должна быть настроена на прием переменной среды. Допускаются подстановочные знаки:

Файл:/etc/ssh/sshd_config

      AcceptEnv MY_*

После изменения sshd необходимо перезапустить, чтобы прочитать обновленную конфигурацию.
(решение этого вопроса...)

      systemctl restart sshd

Текущее соединение сохранится при перезапуске sshd (по крайней мере, при использовании «openssh-server»

ловушка в

Чтобы ограничить использование ключа в целевой системе, к авторизации можно добавить опцию.

Файл:authorized_keysс ограничением по команде

Вся аутентификация PublicKey завершится неудачей, если опустить кавычки, заключающие значениеcommandвариант:

      command=/home/user/deploy.sh ssh-rsa AAAAB3NzaC1yc2EAA...

# DEBUG response of sshd:
debug1: /home/user/.ssh/authorized_keys:1: bad key options: missing start quote

В зависимости от настроек вsshd_configвозврат к аутентификации на основе пароля, соответственноPermission denied (publickey).будет следовать.

Кавычки обязательны, даже если в команде нет пробелов:

      command="/home/user/deploy.sh" ssh-rsa AAAAB3NzaC1yc2EAA...

Детали для команды клиента

Примечание. Помимо параметров командной строки, эти данные можно настроить у пользователя клиента. ~/.ssh/config.

Чтобы передать нужную переменную в качестве опции в командной строке, возможны два варианта синтаксиса:

      -o SendEnv=MY_ENV
-o "SendEnv MY_ENV"

Пожалуйста, не забывайте "кавычки.

Для доступности переменной важно не только установить ее, но и экспортировать:

Это не удастся:

      MY_ENV="Value"
echo $MY_ENV
Value

... несмотря на то, что переменная отображается в текущей оболочке.

Необходимый:

      export MY_ENV="Value"
Другие вопросы по тегам