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 на хосте?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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


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

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

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

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

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

Файл: /etc/ssh/sshd_config

AcceptEnv MY_*

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

systemctl restart sshd

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

Ловушка в authorized_keys

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

Файл: 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"

Альтернативный синтаксис не работает. Однако я заметил, что если я назову свою переменную среды LC_MY_ENV, она будет передана в deploy.sh (с -o SendEnv LC_MY_ENV)! Таким образом, это означает, что что-то блокирует переменную MY_ENV, хотя я добавил ее в /etc/ssh/sshd_config «AcceptEnv MY_ENV» как для узла перехода, так и для узла. У вас есть идея, что это может быть?

Tom 01.04.2023 12:54

В моей системе альтернативный синтаксис принимается так же, как и в вашей. — Вы ставили кавычки при подаче команды? — Они не включены в ваш комментарий, поэтому я заподозрил это.

dodrg 01.04.2023 13:05

Да, я использую «экспорт», и я использовал кавычки. Это не формат параметра. LC_MY_ENV проходит в обоих форматах. Каким-то образом все, что начинается с LC_*, проходит, а только MY_ENV без "LC_" - нет. Значит, должно быть какое-то другое место, кроме /etc/ssh/sshd_config, где я должен разрешить MY_ENV?

Tom 01.04.2023 13:40

Хм, похоже, мне нужно получить тестовую конфигурацию. — Можно ли протестировать команду, запускающуюся с джампхоста (то есть тестировать конечный хост без промежуточного джампхоста)? — Было бы полезно снизить сложность отслеживания проблемы.

dodrg 01.04.2023 13:50

В качестве альтернативы: знаете ли вы о возможности определения переменных на целевом хосте в ~/.ssh/environment (в доме пользователя целевого хоста)? — Насколько это полезно, зависит от концепции вашего сценария.

dodrg 01.04.2023 14:00

Определение переменных на целевом хосте бесполезно, поскольку моя переменная задается извне лицом, выполняющим развертывание. Он сообщает deploy.sh, какую ветку нашего git-репозитория нужно развернуть. Я сделал тест без узла перехода (временно открывая вещи), и MY_ENV достигает сценария развертывания! Так что это что-то на хосте перехода или это связано с использованием хоста перехода. Спасибо за помощь, кстати!

Tom 01.04.2023 14:15

Вы еще не упомянули: несмотря на проблему с MY_ENV, соединение ssh через jumphost успешно?

dodrg 01.04.2023 14:19

О да, deploy.sh выполняется также с хостом перехода. Там у меня есть «echo $MY_ENV» и другие тестовые команды, поэтому я знаю, что MY_ENV не достигает deploy.sh с хостом перехода.

Tom 01.04.2023 16:12

Я уточнил свой ответ, так как мог проверить детали, настроив путь к хосту перехода. — В качестве почти тривиальной (но распространенной) ошибки: перезапускали ли вы свой sshd на целевом хосте после реконфигурации с помощью AcceptEnv MY_ENV?

dodrg 01.04.2023 17:17

Работает!! Я не знал, что вы должны перезапустить его. Спасибо за помощь! Я хотел бы принять ваш ответ, можете ли вы вставить большой жир «вам нужно перезапустить sshd, чтобы изменения вступили в силу» перед вашим ответом :)?

Tom 03.04.2023 10:53

Ответ обновлен. Приятно слышать, что усилия увенчались успехом.

dodrg 03.04.2023 12:26

Другие вопросы по теме