В настоящее время я работаю в сети, которая использует LDAP для аутентификации. Установив в zsh
качестве оболочки для входа в систему, я столкнулся с проблемой получения удаленного доступа ssh
к одной из машин в сети, которая, по-видимому, не была zsh
установлена. Сбой входа с
Dec 8 19:16:11 abert sshd[20649]: User sorokine not allowed because shell /bin/zsh does not exist
Таким образом, вопрос в основном таков: как я могу сказать удаленной машине использовать другую оболочку входа в систему, отличную от той, которая была настроена в LDAP?
OpenSSH_6.0p1 Debian-4 + deb7u2, OpenSSL 1.0.1e
/bin/sh
затем сделали ли ваш удаленный~/.profile
исполняющий модуль подходящей оболочкой, если она доступна?Ответы:
Если ваша оболочка для входа не может быть запущена на каком-либо компьютере, вы не можете войти в нее через SSH или большинством других методов в этом отношении. Сервер SSH всегда выполняет вашу оболочку входа в систему. Если вы передадите команду в
ssh
командной строке, то оболочка входа будет выполнена с-c
командной строкой¹ в качестве аргументов; в противном случае оболочка входа выполняется как оболочка входа без аргумента.Если бы был способ обойти оболочку входа, это было бы дырой в безопасности. Учетная запись может быть настроена как ограниченная учетная запись, превратив ее оболочку входа в систему в программу, которая выполняет только одну конкретную задачу; например, оболочка входа в систему может
git-shell
разрешить доступ только к git-репозиторию, илиrssh
и т. д.Чтобы войти на этот компьютер, вам нужно либо организовать
/bin/zsh
присутствие, либо изменить оболочку входа на что-то, что присутствует.В такой неоднородной среде я рекомендую придерживаться в
/bin/sh
качестве оболочки для входа, поскольку она присутствует везде. Задайте дляSHELL
переменной среды значение,/bin/zsh
если оно присутствует, и вы получите zsh в качестве интерактивной оболочки.Пока вы это делаете, это позволяет избежать жесткого кодирования пути к
zsh
.Чтобы заставить zsh автоматически запускаться для входа в текстовом режиме, вызовите его из своего
.profile
. Если вы хотите использовать его.zprofile
для настройки, сделайте это оболочкой для входа (но тогда вы не получите ту же среду на машинах, где нет zsh, поэтому я не рекомендую этого). Делайте это только в том случае, если это интерактивный вход в систему, а не при.profile
выполнении сценарием, во время входа в режиме графического интерфейса и т. Д.¹ Клиент SSH присоединяет его без опции аргументы с пробелами между ними, и отправляет полученную строку через соединение. Протоколы SSH определяют команду как строку, а не список строк.
источник
[ "0$SHLVL" -lt 2 ]
в случае, если оболочка входа в систему по умолчанию поддерживает,$SHLVL
чтобыbash -l
при необходимости можно было запустить другую оболочку (например, в случае сбоя zsh по какой-либо причине). Таким образомssh -t host bash -l
, запускаетсяbash
оболочка входа в систему без выполнения zsh. Кроме того , я хотел бы заменитьexec zsh
наexec zsh -l
так , что.zlogin
файл используется.Вы должны установить оболочку на указанном компьютере, если у вас есть доступ другим способом, или попросить администратора сделать это за вас, или заменить вашу оболочку в ldap на оболочку, существующую на удаленной машине.
(open) sshd всегда будет проверять пользовательскую оболочку и всегда будет выполнять эту оболочку независимо от того, что передано для выполнения. Если для выполнения передается другая оболочка, она выполняет ее, передавая ее в качестве аргумента пользовательской оболочке, например, пользовательская оболочка - '/ bin / sh', и вы передаете в качестве аргумента оболочку csh, чем она будет выполняться "/ bin / sh -c / bin / csh '.
источник
ssh -l user server "ps ax" | grep bash
легко заметить, что оболочка по умолчанию вызывается не всегда . Что действительно мешает другому решению, так это проверка безопасности zsh, который не находится в / etc / shells