у нас очень странная проблема при настройке и запуске брандмауэра на удаленной машине
когда мы запускаем VIA ssh следующую команду (из сценария bash),
у нас есть машина redhat 7
systemctl запустить firewalld.service
пример из скрипта:
ssh $USER@$IP systemctl enable firewalld.service
ssh $USER@$IP systemctl start firewalld.service
тогда мы получаем сообщение о таймауте от команды - systemctl start firewalld.service
но когда мы запускаем - systemctl start firewalld.service manual на машине
затем мы получили доступ, чтобы запустить его
Так почему же через SSH мы не можем запустить команду, но можем запустить ее локально?
в чем тут отличия?
У меня под рукой нет машины Redhat 7, поэтому я не могу указать точные значения. Но:
Когда вы входите в систему, вы обычно получаете богатую среду для вашего удобства во время интерактивных сеансов. Конечно, зависит от вашей настройки, потому что вы можете установить любой среду, в которую вы хотите добавить операторы в / etc / profile, $ HOME / .bashrc и многими другими способами.
Напротив, когда вы просто вводите удаленную команду, вы получаете более минимальную среду; некоторые каталоги могут отсутствовать в вашей переменной среды PATH, например.
Простым способом увидеть различные среды будут следующие два занятия:
ssh $USER@$IP env
против
ssh $USER@$IP
env
exit
Вы можете начать со сравнения значений PATH и попробовать запустить свою команду systemctl enable firewalld.service
в интерактивной оболочке, но после изменения переменной PATH на ее неинтерактивный вариант.
Если это еще не дает вам бинго, настройте всю среду вашего интерактивного сеанса точно так же, как в неинтерактивной версии.
Есть еще одно отличие ssh host command
способ: у вас нет tty; вы видите, что это выдает команду tty
. Ваш интерактивный сеанс ответит примерно так: /dev/pts/3
, пока ssh host tty
будет отвечать not a tty
. Я заметил, что systemctl зависит от tty или даже ведет себя немного иначе, но другие команды, которые он вызывает, могут это делать. Вам может потребоваться ssh для выделения tty, добавив переключатель -t, например ssh -t $USER@$IP systemctl enable firewalld.service
чтобы увидеть, имеет ли это значение.