ssh не находит путь / usr / local / bin - PullRequest
0 голосов
/ 28 ноября 2018

Если я захожу на свой удаленный Mac с помощью ssh -p22 jenkins@192.168.2.220 и набираю docker, он находит исполняемый файл, потому что он также находит путь /usr/local/bin, если я проверяю с помощью echo $PATH.Но если я сделаю то же самое в heredoc внутри файла setup-mac.sh, например

#!/bin/bash
ssh jenkins@192.168.2.220 '/bin/bash -s' << 'EOF'
"echo $PATH" 
"bash run-docker.sh"
EOF

, который я выполняю через оболочку и bash setup-mac.sh, он не находит /usr/local/bin в PATH и, следовательно, не запускаетсяdocker, потому что команда неизвестна.

На удаленном Mac есть файл run-docker.sh, который является файлом bash, который вызывает команды docker, и он работает, если вызывается локально.

Комурешить эту проблему, я включил PermitUserEnvironment на Mac в sshd_config, но это не сработало.Хотя я только перезапустил службу ssh, а не всю машину.Тем временем я изменил все команды docker на удаленном скрипте run-docker.sh на псевдоним ${DOCKER} и инициализировал его в начале скрипта на DOCKER=/usr/local/bin/docker, но это только обходной путь.

1 Ответ

0 голосов
/ 29 ноября 2018

Я полагаю, что проблема возникает из-за того, что /usr/local/bin добавляется в PATH с помощью личного файла инициализации пользователя 'jenkins' (~/.bashrc).Он запускается только интерактивными оболочками, а оболочка, запускаемая ssh ... '/bin/bash -s' ..., не является интерактивной.

Вы можете попытаться заставить оболочку быть интерактивной, вызвав ее с помощью /bin/bash -i -s, но это может вызвать другиепроблемы.(Оболочка может попытаться и не установить настройку управления заданиями. Значение PS1 может отображаться в выходных данных. ...)

Как правило, нельзя полагаться на правильность установки PATH.для программ.См. Настройка PATH в сценариях - Сценарии OS X для подробного анализа проблемы. Правильный способ использования команд Linux в bash-скрипте также важен, но не имеет большой информации.

Простой и надежный способ навсегда решить проблему - это задать требуемый PATH явнов начале run-docker.sh.Например:

export PATH=/bin:/usr/bin:/usr/local/bin

Возможно, вам понадобится добавить другие каталоги в путь, если run-docker.sh запускает программы, находящиеся в других местах.

Другое решение проблемы - использование полных путейк командам в коде.Однако это делает код более трудным для чтения, более сложным в обслуживании и более сложным для тестирования.Установка безопасного PATH обычно является лучшим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...