Механизм для использования зависит от целей.
Если Вы хотите обеспечить что-то удобное или дружественное для Ваших пользователей, то Ваш /etc/profile
достаточно разумно, если все Ваши пользователи используют ту же оболочку. Если Вы хотите, чтобы команды выполнились только при входе на пути ssh
, поместите команды в /etc/ssh/sshrc
. (Если Вы не возражаете против пользователей, переопределяющих команды с их собственным ~/.ssh/rc
файл.)
Если Вы хотите вынудить пользователя выполнить одну программу и только одну программу, то ForceCommand
опция, как описано DigitalRoss является хорошим подходом. (Я лично далее ограничил бы пользователя с системой мандатного управления доступом, такой как AppArmor, SELinux, TOMOYO, или ВКУС, чтобы гарантировать, что программа не может позволить пользователю выходить. Я работал над AppArmor в течение десяти лет, таким образом, это - инструмент, я выбрал бы сначала, но другие - прекрасные инструменты, записанные превосходными программистами.)
Если Вы просто хотите, чтобы одна программа выполнила и не побеспокоила пользователя всегда, то лучший подход должен использовать pam_exec(8)
модуль, который не может быть обойден, работы независимо от оболочки, и обеспечивает легкую способность работать как пользователь или как учетная запись пользователя программы, выполняющей авторизацию. Страница справочника дает следующий пример:
Add the following line to /etc/pam.d/passwd to rebuild the
NIS database after each local password change:
passwd optional pam_exec.so seteuid make -C /var/yp
This will execute the command
make -C /var/yp
with effective user ID.
Это могло быть расширено для работы auth
, account
, password
, и session
действия; вероятно, session
было бы лучшим для выполнения на, входят в систему. Просто добавьте строку как:
session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd
к Вашему /etc/pam.d/sshd
файл управления.
Довольно новые версии OpenSSH имеют функцию сервера под названием ForceCommand, который дает контроль к сценарию вместо операции (scp, ssh...), который предназначил пользователь. Сценарий передается исходная команда, таким образом, Вы могли, вероятно, объединить в цепочку к нему после выполнения вообще, необходимо сделать.
От sshd_config (5):
ForceCommand
Вызывает выполнение команды, указанной ForceCommand, игнорируя любую команду, предоставленную клиентом и ~/.ssh/rc если существующий. Команда вызывается при помощи оболочки входа в систему пользователя с-c опцией. Это применяется к оболочке, команде или выполнению подсистемы. Это является самым полезным в блоке Соответствия. Команда, первоначально предоставленная клиентом, доступна в среде SSH_ORIGINAL_COMMAND vari-способный. Определение команды ''внутренних-sftp'' вызовет использование незавершенного sftp сервера, который не требует никаких файлов поддержки при использовании с ChrootDirectory.
Я использовал это однажды, чтобы переопределить scp и обеспечить безопасную загрузку драгоценного камня, не давая каждому пользователю, разрешенному загружать драгоценные камни интерактивный доступ, в котором они не нуждались или хотели.
Один путь состоял бы в том, чтобы использовать системный-журнал-ng в качестве демона системного журнала и настроить его для выполнения фона сценария каждый раз определенная запись в журнале (такая как успешный вход в систему ssh) соответствия.