Это код OpenSSH 7.3p1 для вызова .ssh/rc
. Это из "session.c". Файл rc вызывается функцией с именем do_rc_files()
. Весь этот код работает на сервере. Все варианты ссылки взяты из sshd_config
наряду с записью authorized_keys
файла для ключа , который подтвердил подлинность сеанса (если был использован ключ аутентификации).
/*
* Run $HOME/.ssh/rc, /etc/ssh/sshrc, or xauth (whichever is found
* first in this order).
*/
static void
do_rc_files(Session *s, const char *shell)
{
[...]
/* ignore _PATH_SSH_USER_RC for subsystems and admin forced commands */
if (!s->is_subsystem && options.adm_forced_command == NULL &&
!no_user_rc && options.permit_user_rc &&
stat(_PATH_SSH_USER_RC, &st) >= 0) {
snprintf(cmd, sizeof cmd, "%s -c '%s %s'",
shell, _PATH_BSHELL, _PATH_SSH_USER_RC);
if (debug_flag)
fprintf(stderr, "Running %s\n", cmd);
f = popen(cmd, "w");
if (f) {
if (do_xauth)
fprintf(f, "%s %s\n", s->auth_proto,
s->auth_data);
pclose(f);
} else
fprintf(stderr, "Could not run %s\n",
_PATH_SSH_USER_RC);
} else if (stat(_PATH_SSH_SYSTEM_RC, &st) >= 0) {
...
do_rc_files()
вызывается так:
if (!options.use_login)
do_rc_files(s, shell);
Итак, это говорит нам:
- Файлы rc не запускаются, если была установлена опция sshd "UseLogin".
- .ssh/rc не вызывается, если сеанс вызывает подсистему. Это влияет на сеансы SFTP, например.
- .ssh/rc не вызывается, если сеанс подчиняется параметру
ForceCommand
в sshd_config
(но не для принудительных команд от authorized_keys
).
- .ssh/ гс не вызывается , если опция
authorized_keys
«не-пользователя-гс» была установлена (или "ограничения", который подразумевает не-пользователей-RC).
- .ssh/rc не вызывается, если для опции
sshd_config
"PermitUserRC" задано значение "no".
- .ssh/rc не вызывается, если он отсутствует, относительно домашнего каталога пользователя.
Если OpenSSH решит вызвать .ssh/rc, он в итоге вызовет эту команду:
$SHELL -c '/bin/sh .ssh/rc'
где «$ SHELL» - это оболочка входа пользователя. Это не удастся, если оболочка пользователя не примет опцию «-c» для запуска команды. Также может произойти сбой, если /bin/sh
отсутствует или работает неправильно.