~ / .profile не завантажується під час використання SSH (Ubuntu)


22

Відредаговано так, щоб відобразити проблему, яку я дуже хотів вирішити:

Мені потрібно налаштувати своє рубінове середовище, щоб я міг розгорнутись через Capistrano.

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

Я поміщаю їх у ~ розвернути / .profile, але коли я заграю, вони не запускаються. Ідеї?

Я запускаю Ubuntu 12.04.


Первісне питання:

Коли я сш в інший обліковий запис у localhost, він не завантажує мій .profile. Як змусити ssh завантажити його? Я запускаю Ubuntu 12.04.

Відповіді:


15

Ви можете чітко вказати, що ви хочете запустити інтерактивну оболонку входу:

 ssh user@host bash --login -i 

«Роль» з ~/.profile(. Або ~ / bash_profile) і .bashrcдля SSH є деякі інші файли (див man sshподробиці):

~ / .ssh / навколишнє середовище

Містить додаткові визначення змінних середовища; див. ЕКОЛОГІЯ вище.

~ / .ssh / rc

Команди в цьому файлі виконуються ssh, коли користувач входить у систему, безпосередньо перед запуском оболонки користувача (або команди). Додаткову інформацію див. На сторінці керівництва sshd (8).


"Ви можете" часто не відповідає дійсності, тому що ssh працює за допомогою іншого інструменту (безперервна доставка), і команду неможливо легко змінити.
Ян

6

.profileзавантажується лише для оболонок входу, для яких сеанс ssh не є (за замовчуванням). Якщо ви хочете що-небудь запустити при запуску для всіх інтерактивних оболонок, помістіть його .bashrcзамість нього ( .zshrcабо будь-яку іншу оболонку).

Крім того, якщо ви просто хочете увійти в інший обліковий запис на локальній машині, ssh, ймовірно, буде зайвим. Ви можете suзамість цього використати щось.


3
Здається .bashrc, теж не завантажений.
kenorb

Це неправильно. Це є Ввійти оболонки. На сторінці man: "Якщо вказана команда, вона виконується на віддаленому хості замість оболонки входу."
mkj


Коли ssh дається команда запустити, вона за замовчуванням не виділяє tty, і тоді оболонка також не є "інтерактивною".
Ян

4

Використання bash повинно спричинити читання ~/.bashrc. Наступне може допомогти з ksh та sh (bash у режимі sh) або коли ваш файл ~/.bashrcне виконується під час входу.

Sshd консультується ~/.ssh/environment(перевірте sshd_config (5) на дозволи) та ~/.ssh/sshrcабо ~/.ssh/rc. Це дає можливість встановити ENV=~/.profileабо BASH_ENV=~/.profileіSSH_LOGIN=Y

В ~/.profileЯ розкладку наступний (Замінити ENVз BASH_ENVпри використанні Баша):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

Bash зчитується ~/.profileлише тоді, коли це оболонка для входу, і ~/.bash.bashrcлише якщо у неї є термінал, жоден з яких не відповідає дійсності за замовчуванням, коли викликає команду з ssh. Однак є кілька інших варіантів встановлення середовища на сервері, але, на жаль, залежно від налаштування системи:

  • Зш читає ~/.zshenvнавіть у цьому випадку; Однак для bash немає відповідного конфігураційного файла.
  • Якщо PermitUserEnvironmentпараметр увімкнено /etc/sshd_config, ssh зчитується ~/.ssh/environment. На жаль, цей параметр за замовчуванням вимкнено.
  • Якщо pam_env.soзателефонується user_readenv=1в /etc/pam.d/sshd, він прочитає ~/.pam_environment. Хоча модуль не є типовим для модуля, він називається таким чином принаймні в Ubuntu .
  • Якщо все інше не вдається, ви можете помістити command=директиву у файл дозволених ключів, що викликає скрипт обгортки, який встановлює середовище та виконує $SSH_ORIGINAL_COMMANDв кінці (я команда одна для оболонки, тому eval тут доречний, але я не впевнений) .

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