какой профиль запуска запускается, если он есть, когда ssh запускается с аргументом server + command?

какой профиль запуска запускается, если он есть, когда ssh запускается с аргументом server + command?

Я знаю /etc/profileи ~/.profileнахожусь среди сценариев запуска, используемых, когда sshиспользуется для входа на сервер – т.е. с использованием sshаргумента сервера. Однако сценарий, где я просто использую sshаргумент сервера+команда, похоже, не подхватывает те же сценарии запуска.

Предположим, что у меня bash в качестве оболочки по умолчанию. Если .bashrcсуществует, я знаю, что он выбирается в этом сценарии. Но если .bashrcне существует и нет других персональных профилей, что еще запускается?

Есть ли другой глобальный скрипт, предоставляющий переменные среды?

решение1

На этой странице вы найдете больше информации, чем вам, вероятно, хотелось бы знать, но это отличный краткий ресурс:

В принципе, когда вы подключаетесь к компьютеру по ssh, вы не запускаете оболочку 'login', поэтому берутся другие файлы. Короче говоря, если ваша оболочка по умолчанию — /bin/bash (по умолчанию в Ubuntu), вы будете получать ~/.bashrcв домашнем каталоге. Проверьте FILESраздел страницы руководства bash ( man bash), ближе к концу, на предмет других файлов, которые вступают в игру.

Также убедитесь, что вы начеку в ваших .bashrcfor строках, которые выходят, если не используете 'интерактивную' оболочку. Хороший способ выяснить это - ввести отпечатки в ваш .bashrcи продолжать экспериментировать, пока не поймете это.

Так:

# ~/.bashrc:

echo "HERE I WAS!"

# Exit here unless an interactive session.
[ -z "$PS1" ] && return

echo "HERE I AM!"

решение2

Без команды SSH запускает оболочку входа. Для bash, это включает в себя источник .profile(который, в Ubuntu, источники .bashrc) (и /etc/profile, который источники /etc/bash.bashrc). Есть другие файлы, которые можно было бы использовать вместо этого, например .bash_profile, но в настройке Ubuntu по умолчанию есть только .profile.

$ grep bashrc /etc/profile .profile
/etc/profile:    # The file bash.bashrc already sets the default PS1.
/etc/profile:    if [ -f /etc/bash.bashrc ]; then
/etc/profile:      . /etc/bash.bashrc
.profile:    # include .bashrc if it exists
.profile:    if [ -f "$HOME/.bashrc" ]; then
.profile:   . "$HOME/.bashrc

При запуске с помощью команды SSH не запускает оболочку входа, поэтому, согласноman bash(раздел INVOCATION):

When an interactive shell that is not a login shell  is  started,  bash
reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
these files exist.  This may be inhibited by using the  --norc  option.
The  --rcfile  file option will force bash to read and execute commands
from file instead of /etc/bash.bashrc and ~/.bashrc.

Однако, с командой, bashне запускается интерактивно. Тогда почему .bashrcисходный? Опять же, из man bash:

Bash attempts to determine when it is being run with its standard input
connected to a network connection, as when executed by the remote shell
daemon, usually rshd,  or  the  secure  shell  daemon  sshd.   If  bash
determines  it  is  being  run  in  this fashion, it reads and executes
commands from ~/.bashrc and ~/.bashrc, if these  files  exist  and  are
readable.  It will not do this if invoked as sh.  The --norc option may
be used to inhibit this behavior, and the --rcfile option may  be  used
to  force  another file to be read, but neither rshd nor sshd generally
invoke the shell with those options or allow them to be specified.

Другие файлы можно прочитать по SSH (изman ssh, раздел FILES):

~/.ssh/rc
     Commands in this file are executed by ssh when the user logs in,
     just before the user's shell (or command) is started.  See the
     sshd(8) manual page for more information.
/etc/ssh/sshrc
     Commands in this file are executed by ssh when the user logs in,
     just before the user's shell (or command) is started.  See the
     sshd(8) manual page for more information.

Для переменных окружения (из man sshраздела ENVIRONMENT):

Additionally, ssh reads ~/.ssh/environment, and adds lines of the format
“VARNAME=value” to the environment if the file exists and users are
allowed to change their environment.  For more information, see the
PermitUserEnvironment option in sshd_config(5).

Модуль pam_envвключен для SSH:

$ grep pam_env /etc/pam.d/sshd 
# /etc/security/pam_env.conf.
session    required     pam_env.so # [1]
session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale

Поэтому переменные в /etc/environmentи ~/.pam_environmentтакже устанавливаются (и /etc/default/locale, поскольку envfileустанавливается). Однако эти файлы не являются исходными, как .profileэто было, поэтому вы не можете использовать здесь команды оболочки.

Связанный контент