когда клиенты подключаются к серверу, сервер передает данные, в которых они нуждаются, но предварительным условием является правильное имя пользователя и пароль.
Если вашим основным требованием является аутентификация, топопробуйте man pam
.Есть также несколько библиотек, позволяющих авторизоваться через LDAP.К сожалению, у меня нет личного опыта реализации ни того, ни другого.
В противном случае воссоздание полной пользовательской среды ненадежно и подвержено ошибкам.Представление опечатки или бесконечного цикла, но в пользовательском ~ / .profile.
Я не делал этого в течение некоторого времени, но я бы также попытался копать в направлении "su", выясняя пользовательскую оболочку (из / etc / passwd) и пытается выполнить exec () так, как если бы это была оболочка входа в систему (с «-»).Но после этого вам нужно как-то передать ей команду для выполнения, и это проблема: оболочки работают по-разному в пакетном режиме и в интерактивном режиме.В качестве возможного взлома на ум приходит ожидаемый (man expect
), но он по-прежнему слишком ненадежен для IMO.
В прошлом я использовал ssh
в expect
(для ввода пароля), но этоломался на настроенные профили пользователей каждый раз.С expect
, чтобы отправить команду, нужно как-то распознать, что оболочка завершила инициализацию (выполнение файлов профиля и rc).Но так как многие люди настраивают приглашение оболочки и их профили / rc-файлы печатают дополнительную информацию, довольно часто expect
слишком быстро распознавал приглашение оболочки.
Кстати, в зависимости от количества пользователей, можно попробоватьнастройка, при которой пользователи вручную запускают сервер под своей учетной записью.Сервер будет иметь доступ только к той информации, которая доступна только пользователю.