На Mac с OSX 10.7.5 мне нужно задать PATH для неинтерактивных пользователей, которые подключаются через ssh и аутентифицируются с помощью LDAP. Это тот же вопрос, который был задан (и на который был дан ответ) здесь:
но я недостаточно знаком с PAM или LDAP, чтобы полностью понять ответ.
Похоже, мне нужно:
add a line to /etc/pam.d/sshd saying "auth required pam_env.so"
create a file named /etc/security/pam_env.conf
но документация по pam_env.conf действительно запутанная, и я не могу понять, нужно ли мне значение DEFAULT или OVERRIDE.
Я прав, что это правильные шаги? Какую строку мне нужно вставить в pam_env.conf?
Спасибо, Крис.
ps Я попробовал поместить строку "auth required pam_env.so debug" в /etc/pam.d/sshd, но не вижу ничего в /var/log/system.log, что выглядело бы так, будто это исходит от pam_env.so. Я также создал /etc/security/pam_env.conf и поместил в него строку "PATH DEFAULT=/usr/fred OVERRIDE=/usr/george", и это не оказало видимого влияния на PATH.
pps Если я выполню:
ssh USER@MACHINE echo \$SHELL
Там написано /bin/bash. Если я затем войду на МАШИНУ и добавлю эту строку в /etc/bashrc:
export Test=Fred
и вернуться к своей машине и выполнить:
ssh USER@MACHINE echo \$Test
ничего не возвращает. Когда я вхожу в систему таким образом с помощью LDAP, он не выполняет /etc/bashrc.
ppps Дополнительная информация, которая может быть важна: на MACHINE нет локального пользователя с именем USER. MACHINE настроен на аутентификацию LDAP, поэтому, когда я подключаюсь по ssh к USER@MACHINE, мой $HOME устанавливается в /Network/Servers/blah/blah/Users/USER. Если я редактирую /Network/Servers/blah/blah/Users/USER/.bashrc, чтобы задать PATH, это работает правильно для меня, но это не лучшее решение, потому что это означает, что каждый человек, который хочет получить доступ к этому серверу, должен редактировать свой сетевой .bashrc.
решение1
Это модификацияhttps://askubuntu.com/questions/382485/ssh-как-принудительно-выполнить-скрипт-и т. д.-sshrc-forcecommand-on.
С помощью следующего вы можете принудительно включить источник /etc/bashrc
для всех входов SSH, интерактивных или нет. Это может вызвать некоторые проблемы у тех пользователей, которые рассчитывают на то, что их /etc/bashrc
не казнят за неинтерактивные входы, поэтому действуйте осторожно (хотя это именно то, о чем вы просите, так что вы, вероятно, знаете последствия).
Сначала добавьте ForceCommand /usr/local/bin/sshd_envs
в /etc/sshd_config
. Затем вставьте следующее в /usr/local/bin/sshd_envs
:
#!/bin/bash
source /etc/bashrc
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
eval $SSH_ORIGINAL_COMMAND
else
exec $SHELL
fi
Какие бы настройки среды вы ни установили, /etc/bashrc
они будут применяться при каждом входе в систему по SSH.
Обратите внимание, что по умолчанию /etc/bashrc
для OS/X произойдет выход сразу после оценки первых нескольких строк (поскольку PS1 не установлен для неинтерактивных оболочек):
if [ -z "$PS1" ]; then
return
fi
Поэтому либо закомментируйте эти строки, либо поместите перед ними все, что вы хотите оценить для неинтерактивных входов по SSH.