Я использую Bash как на клиенте, так и на сервере. При запуске команды через SSH:
ssh <host> 'declare'
дает список переменных оболочки.ssh <host> 'mount'
дает список точек монтирования.
Тем не менее, declare
это встроенный в Bash, а mount
внешняя команда. Как SSH узнает, какой запускать, если на сервере есть встроенная оболочка и внешняя команда с таким же именем?
/etc/passwd
. Если/usr/sbin/nologin
вы не можете войти в систему.Ответы:
ssh
Запускает команды вы предоставите в оболочке удаленного пользователя (полученный из/etc/passwd
), как и видно из исходного кода :Поэтому соответствующие команды, которые выполняются для вашего примера на удаленном сервере:
bash -c declare
bash -c mount
Оба они передаются
bash
и оцениваются. Встроенные модули оцениваются внутри, а внешние команды вызываются так, как если бы вы делали это из локальной командной строки.источник
-t
переключателя, но он все равно не загрузит файлы rc.sshd
(сервер) делает это, а неssh
(клиент).