У меня есть команда, которая работает нормально, если я ssh к машине и запускаю ее, но не удается, когда я пытаюсь запустить ее с помощью удаленной команды ssh, например:
ssh user@IP <command>
Сравнение вывода «env» с использованием обоих методов приводит к различным средам. Когда я вручную захожу на компьютер и запускаю env, я получаю гораздо больше переменных окружения, чем при запуске:
ssh user@IP "env"
Есть идеи почему?
ssh
environment-variables
Том Файнер
источник
источник
bash
не язык сценариев?Ответы:
Существуют разные типы снарядов. Оболочка выполнения команд SSH - это неинтерактивная оболочка, тогда как обычная оболочка - это либо оболочка для входа, либо интерактивная оболочка. Описание следует из man bash:
источник
ssh user@host "bash --login -c 'command arg1 ...'"
заставит удаленную оболочку настроить среду входа в систему. Упомянутый вами раздел упоминается,--login
но было бы легко пропустить это.ssh <ssh options> <IP> bash --login my_script.sh
для запуска сценария на удаленной машине, работает угощение и позволил мне успешно использовать локальные переменные env, какJAVA_HOME
Как насчет поиска профиля перед запуском команды?
ssh user@host "source /etc/profile; /path/script.sh"
Вы можете обнаружить , что лучше изменить , что
~/.bash_profile
,~/.bashrc
или любой другой .(Как здесь (linuxquestions.org) )
источник
Среда оболочки не загружается при запуске удаленной команды ssh. Вы можете редактировать файл окружения ssh:
Его формат:
Кроме того, проверьте
sshd
конфигурацию дляPermitUserEnvironment=yes
варианта.источник
У меня была похожая проблема, но в итоге я узнал, что ~ / .bashrc - это все, что мне нужно.
Однако в Ubuntu мне пришлось прокомментировать строку, которая останавливает обработку ~ / .bashrc:
источник
/etc/bash.bashrc
.Я нашел простое решение этой проблемы - добавить исходный файл / etc / profile в начало файла script.sh, который я пытался запустить в целевой системе. В системах здесь это привело к тому, что переменные окружения, которые были необходимы для script.sh, были настроены так, как если бы они запускались из оболочки входа.
В одном из предыдущих ответов было предложено использовать ~ / .bashr_profile и т. Д. Я не тратил много времени на это, но проблема в том, что если вы используете ssh для другого пользователя в целевой системе, а не для оболочки исходной системы, из которой вы вошли, мне показалось, что это вызывает пользователя исходной системы. имя, которое будет использоваться для ~.
источник
Просто экспортируйте переменные окружения, которые вы хотите, перед проверкой неинтерактивной оболочки в ~ / .bashrc.
источник