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

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

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

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

0
задан 7 April 2015 в 03:36

2 ответа

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

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

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

Как это:

# ~/.bashrc:

echo "HERE I WAS!"

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

echo "HERE I AM!"
1
ответ дан 7 April 2015 в 03:36

Без команды 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 таким образом, Вы не можете использовать команды оболочки здесь.

1
ответ дан 7 April 2015 в 03:36

Другие вопросы по тегам:

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