2013-11-10 4 views
32

Я пытаюсь выполнить команду на удаленном сервере Linux с помощью команды SSH на локальном сервере, как это:Выполнение команды на удаленном сервере через SSH

SSH myremoteserver «тип ttisql»

где ttisql является исполняемым файлом на пути моей удаленной машины.

Результат выполнения этого:

Баш: линия 0: Тип: ttisql: не найдены

Когда я просто подключить первый и сделать:

SSH myremoteserver

и введите команду:

[MyUser @ myremoteserver ~] $ Тип ttisql

я вернусь на путь ttisql ехе, как я бы ожидать.

Странно, что когда я выполняю первую команду в своей бета-среде, она работает так, как ожидалось, и возвращает путь к exe. В бета-сценарии машина A подключается к удаленному компьютеру B, но обе машины находятся на месте, а команда ssh быстро подключается к удаленному компьютеру.

Проблема возникает в нашей производственной среде, когда машина A является локальной, а машина B находится за пределами площадки, а для команды ssh требуется второе или два соединения.

Единственное отличие, которое я вижу, это время, которое требуется для подключения ssh к производству. Путь в удаленной системе правильный, так как команда работает, если введена после первоначального соединения.

Может ли кто-нибудь помочь мне понять, почему эта простая команда будет работать в одной среде, а не в другом? Может ли проблема быть связана с временем, которое требуется для подключения через ssh?

ответ

18

Ваш PATH настроен по-разному, когда ваша оболочка интерактивна (= когда вы вошли на сервер), а также не интерактивны (выполняются команды с ssh).

Загляните в файлы rc, используемые вашей оболочкой, например .bashrc, .bash_profile, .profile (в зависимости от вашей системы). Если вы установили PATH в нужное место, то ttisql может работать, когда вы запускаете его через ssh.

Другим решением является использование абсолютного пути ttisql, то это не будет зависеть от вашей настройки PATH.

+1

Обновления .bashrc и .bash_profile файлы сделали трюк. Благодаря! – jlteksolutions

+0

Спасибо за ответ. Дополнительным зависанием для меня была разница между 'ssh remote echo $ PATH' и' ssh remote 'echo $ PATH''. Маркеры были ключевыми. – fenkerbb

+1

Это круто @fenkerbb! Кстати, общее имя для тех, кто в вашем примере, одинарные кавычки ;-) – janos

24

Окружающая среда может быть разной в неинтерактивном сеансе (ssh command) с интерактивного сеанса (ssh, затем command). Попробуйте echo $PATH в обоих случаях.

ssh myremoteserver 'echo $PATH' 

против

ssh myremoteserver 
[[email protected]~]$: echo $PATH 

Если они отличаются, смотрите во всех сценариях запуска для некоторого дифференцированного поведения, основанного на $PS1 или $-

Смежные вопросы