Как установить PATH при запуске команды ssh?

Потребовалось время, чтобы вернуться сюда, чтобы ответить на собственные вопросы.

Обновление библиотеки Jsch

Pycharm версии 4 содержит библиотеку с ошибкой. Эта ошибка препятствует SFTP-коммуникации с использованием определенных алгоритмов обмена ключами SSH с чем-либо, кроме базовых шифров Diffie-Helman-group1*. Поэтому нам нужно обновить библиотеку, чтобы Pycharm мог взаимодействовать с нашей виртуальной машиной. Наша виртуальная машина позволяет использовать только более современные ключи и не допускает использование устаревших шифров Diffie-Helman-group1*.

Pycharm 4 имеет устаревшую версию java-библиотеки под названием Jsch, которую он использует для связи с SFTP (которая необходима для передачи вспомогательных файлов). Чтобы решить эту проблему, нужно просто обновить библиотеку.

Обновленная библиотека была найдена на sourceforge и находится по адресу: http://sourceforge.net/projects/jsch/files/jsch.jar/0.1.53/

Затронутые версии

  • Mac: Pycharm
  • Windows: Pycharm
  • Linux: Pycharm

Шаги загрузки

  1. Скачайте копию Jsch с этой страницы (вверху).
  2. Удалите старую версию: jsch-0.1.51.jar sudo rm /Applications/PyCharm.app/Contents/lib/jsch-0.1.51.jar
  3. Скопируйте новую библиотеку pycharm каталог: /Applications/PyCharm.app/Contents/lib cp ~/Downloads/jsch-0.1.53.jar /Applications/PyCharm.app/Contents/lib/.
  4. Перезапустите Pycharm

Примечание: Это было исправлено в Pycharm 5, и обновление исправило это для моих коллег, но если у вас есть другие приложения на основе java, это может помочь вам.

Примечание: В конечном итоге я обнаружил это, покопавшись в журнале Pycharm. Я увидел, что есть проблемы с библиотекой, и несколько поисков в google спустя я нашел библиотеку на sourceforge.

18
24.12.2016, 13:07
2 ответа

У вас есть несколько возможностей:

  • Задайте ПУТЬ на сервере в ~ / .ssh / environment (необходимо включить в PermitUserEnvironment да в sshd_config ).
  • Использовать полный путь к двоичному файлу
  • Как вы упомянули, источник вручную .bashrc : префикс команды с помощью . ~ / .bashrc (или исходный код )

Какой путь вы выберете в значительной степени зависит от варианта использования.

30
27.01.2020, 19:46

Вы приравниваете локальные настройки к удаленным настройкам.

Локально, экземпляр bash, текущая запущенная оболочка, в которой вы пишете:

ssh user@host command

Будет выполнять команду ssh (не более того) как клиент ssh.
Для этого local оболочке требуется , а не для запуска вспомогательной оболочки, новой оболочки или входа в систему.

Команда выполняется как ls команда: локально.

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

Эта новая оболочка Remote обязательно будет оболочкой входа в систему, поскольку удаленный пользователь (в этой системе) должен быть аутентифицирован для входа в систему. Или, если дана какая-то конкретная команда, просто запустите такую ​​команду с привилегиями аутентифицированного пользователя.

Вы можете увидеть, какие файлы получены, добавив $ file sourced в начало каждого файла (в системе удаленной ) (для изменения / etc / files):

$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done

А затем просто запустите консоль ssh:

$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read

В этом случае были прочитаны оба файла bashrc , потому что каждый файл профиля содержал команды для включать их не потому, что их напрямую получила оболочка входа.

$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read

В этой системе, где bashrc читается в обоих случаях.

Нет необходимости добавлять исходный код ~ / .bashrc к команде для выполнения.

Изменить ПУТЬ

Все, что вам нужно сделать, это указать правильные настройки для изменения «$ ПУТЬ» в /etc/bash.bashrc для всех пользователей, запускающих оболочку в этой системе. . Или в ~ / .bashrc для каждого пользователя, которому это нужно. Вы можете добавить (или отредактировать) скелет пользователя .bashrc в / etc / skel / , чтобы любой новый пользователь имел доступный правильный файл.

Вышеуказанное верно только для bash. Если вам нужно, чтобы этот параметр работал для всех оболочек, возможно, установите переменную среды PATH с помощью файла ssh ~ / .ssh / environment для каждого пользователя, которому он нужен. Или используйте / etc / ssh / sshrc для глобальной настройки в системе, в которой работает ssh-сервер (дополнительные подробности см. В разделе «Файлы» в man sshd ).

7
27.01.2020, 19:46

Теги

Похожие вопросы