Подтвердить что ты не робот

Выполнять команду на удаленном сервере через 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?

4b9b3361

Ответ 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 или $-