Сбой SSH — удаленного выполнения программы с хоста?

#linux #ubuntu #ssh

#linux #ubuntu #ssh

Вопрос:

Мне нужно запустить эту команду с компьютера Ubuntu: ssh user@hostip "which mvn" чтобы показать оправдываемый путь Maven, но он ничего не показывает

 root@~: ssh user@hostip "which mvn"
root@~:
  

Я проверяю команду which mvn на удаленном хосте, она показывает мне :

 root@~: which mvn
/usr/share/mvn
root@~:
  

Я пытаюсь найти источник .bashrc при выполнении команды excute ssh, но безуспешно:

 root@~: ssh user@hostip ". ~/.bashrc;which mvn"
root@~:
  

В ./ bashrc также нет ничего о настройке пути maven

Итак, что я должен делать?

Комментарии:

1. Каков вывод ssh user@hostip «echo $PATH», which команда поиска исполняемого файла в папках, указанных с помощью $PATH

2. @Cody вам нужны одинарные кавычки для этого, или вы получите локальный путь.

Ответ №1:

 root@~: ssh user@hostip "which mvn"
  

Когда вы запускаете ssh и указываете команду для вызова в удаленной системе, ssh по умолчанию не выделяется PTY (псевдо-TTY) для удаленного сеанса. Оболочки, подобные bash , обнаружат, что они выполняются без TTY, и это изменит способ инициализации процесса оболочки.

В вашем случае любая команда, добавляющая «/usr /share» к вашему удаленному ПУТИ, вероятно, не выполняется для неинтерактивных сеансов (сеансов без TTY). Вероятно, вы можете решить эту проблему, сообщив ssh запросить TTY для удаленного сеанса:

 ssh -tt user@hostip "which mvn"
  

-t Опция указывает ssh запросить TTY для удаленного сеанса. Это приведет к тому, что ваш удаленный экземпляр оболочки инициализирует себя для интерактивного сеанса. Обратитесь к руководству по ssh для получения подробной информации о -t опции.

Если это не решит проблему, вам нужно будет найти точку в файлах конфигурации вашей оболочки на удаленном сервере (.bash_profile, .bashrc и т.д.), Где /usr/share добавляется к вашему пути, и убедитесь, что этот шаг выполняется для неинтерактивных сеансов.