Выполнять команду на удаленном сервере через ssh
Я пытаюсь выполнить команду на удаленном Linux-сервере с помощью команды ssh на локальном сервере, например:
ssh myremoteserver 'type ttisql'
где ttisql - исполняемый файл на пути к моей удаленной машине.
Результат этого:
bash: строка 0: тип: ttisql: не найден
Когда я просто соединяюсь первым и делаю:
ssh myremoteserver
а затем введите команду:
[myuser @myremoteserver ~] $: type ttisql
Я возвращаюсь по пути ttisql exe, как я ожидал.
Странно то, что когда я выполняю первую команду в своей бета-среде, она работает так, как ожидалось, и возвращает путь к exe. В бета-сценарии машина A подключается к удаленному компьютеру B, но обе машины находятся на месте, а команда ssh быстро подключается к удаленному компьютеру.
Проблема встречается в нашей производственной среде, когда машина A локальна, а машина B находится за пределами площадки, а команда ssh занимает секунду или два для подключения.
Единственное различие, которое я вижу, - это время, которое требуется для соединения ssh. Путь в удаленной системе правильный, поскольку команда работает, если она введена после первоначального соединения.
Может ли кто-нибудь помочь мне понять, почему эта простая команда будет работать в одной среде, а не в другом? Может ли проблема быть связана с временем, которое требуется для подключения через ssh?
Ответы
Ответ 1
Ваш PATH
настроен по-разному, когда ваша оболочка является интерактивной (= когда вы вошли на сервер), а когда не интерактивно (выполняете команды с ssh
).
Посмотрите на файлы rc, используемые вашей оболочкой, например .bashrc
, .bash_profile
, .profile
(зависит от вашей системы). Если вы установите PATH
в нужном месте, тогда ttisql
может работать, когда вы запускаете его через ssh
.
Другое решение - использовать абсолютный путь ttisql
, тогда он не будет зависеть от вашей настройки PATH
.
Ответ 2
Среда может отличаться в неинтерактивном сеансе (ssh command
) от интерактивного сеанса (ssh
, затем command
). Попробуйте echo $PATH
в обоих случаях.
ssh myremoteserver 'echo $PATH'
против
ssh myremoteserver
[[email protected]~]$: echo $PATH
Если они отличаются, посмотрите во всех запусках script для некоторого дифференцированного поведения на основе $PS1
или $-