Як встановити PATH при виконанні команди ssh?


18

Якщо припустити, що у користувача є /bin/bashоболонка в /etc/passwd. Потім ssh user@host commandзапускає команду за допомогою Bash. Однак ця оболонка не є ні входом, ні інтерактивною, що означає, що ні вона ~/.bash_profileне ~/.bashrcотримується. У такому випадку як встановити PATHзмінну середовища так, щоб виконувані файли можна було знайти та виконати? Чи рекомендується префікс дійсної команди за допомогою source ~/.bashrc?


5
.bashrcджерело, але, мабуть, є тест на інтерактивність вгорі. Необхідно застосувати те, що ви поставите перед цією перевіркою, і це те, що я роблю, щоб змусити PATH, коли сервер не дозволяє користувальницькому середовищу чи використанню ~/.pam_environment.
муру

Відповіді:


18

У вас є мало можливостей:

  • Встановіть PATHна сервер в ~/.ssh/environment(потрібно ввімкнути PermitUserEnvironment yesв sshd_config).
  • Використовуйте повний шлях до двійкового
  • Як ви вже згадували, джерело вручну .bashrc: префікс команди за допомогою . ~/.bashrc(або source)

Це в значній мірі залежить від випадку використання, яким шляхом ви підете.


6
Вручну пошук джерел ~/.bashrcне є необхідним, це відбувається за замовчуванням. Це, здається, мені погана ідея.
соронтар

$PATHне розширюється з ~/.ssh/environment, принаймні, не в OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
Яакко

1
@Jaakko Можливо, відключено в sshd_config за допомогою PermitUserEnvironment(за замовчуванням у останніх версіях)
Jakuje

Я зрозумів це, він не розширюється, тому що я додав рядок PATH="$PATH:/new/path"до свого, ~/.ssh/environmentколи це мало бутиPATH=$PATH:/new/path
Jaakko

4

Ви прирівнюєте локальні настройки до віддалених налаштувань.

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

ssh user@host command

Виконує команду ssh (нічого більше) як ssh клієнта.
Для цього локальній оболонці потрібно не запускати підкожування або новий оболонку або логін.

Команда виконується як lsкоманда: локально.

Саме команда ssh для клієнта відкриває мережеве з'єднання з віддаленою системою, де, якщо правильно встановлено автентифікацію, буде запущена нова оболонка для виконання команди, записаної як аргумент для ssh, або, якщо аргумент не заданий, очікуйте подальших команд на цьому з'єднанні.

Ця нова віддалена оболонка обов'язково буде оболонкою для входу, оскільки віддаленому користувачеві (до цієї системи) потрібно автентифікувати для входу. Або, якщо задана якась конкретна команда, просто запустіть таку команду з автентифікованими правами користувача.

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

$ 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файли були прочитані тому, що кожен profileфайл мав команди для їх включення, а не тому, що оболонка входу безпосередньо їх отримувала.

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

У цій системі, де bashrcчитається в обох випадках.

Не потрібно додавати source ~/.bashrcкоманду a для виконання.

Змінити PATH

Все, що вам потрібно зробити, це включити правильні налаштування, щоб змінити "$ PATH", або /etc/bash.bashrcдля всіх користувачів, які запускають оболонку в цій системі. Або ~/.bashrcдля кожного користувача, який цього потребує. Ви можете додати (або відредагувати) скелет користувача, .bashrcщоб /etc/skel/будь-який новий користувач створив потрібний файл.

Вищезазначене справедливо лише для bash. Якщо вам потрібні параметри для роботи всіх оболонок, можливо, встановлення змінної середовища PATH за допомогою файлу ssh ~/.ssh/environmentдля кожного користувача, який цього потребує. Або скористайтеся /etc/ssh/sshrcдля глобальної настройки в системі, де працює ssh-сервер (будь ласка, прочитайте розділ Файли man sshdдля отримання додаткової інформації).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.