Estoy usando Bash tanto en el cliente como en el servidor. Al ejecutar un comando sobre SSH:
ssh <host> 'declare'
da una lista de variables de shell.ssh <host> 'mount'
da una lista de puntos de montaje.
Sin embargo, declare
es un Bash incorporado, mientras que mount
es un comando externo. ¿Cómo sabe SSH qué ejecutar si hay un shell incorporado y un comando externo con el mismo nombre en el servidor?
/etc/passwd
. Si es así,/usr/sbin/nologin
no puede iniciar sesión.Respuestas:
El
ssh
ejecuta los comandos suministrados por el usuario en la cáscara del usuario remoto (obtenido de la/etc/passwd
), como es visible desde el código fuente :Por lo tanto, los comandos respectivos que se ejecutan para su ejemplo en el servidor remoto son:
bash -c declare
bash -c mount
Ambos son pasados al
bash
y evaluados. Los incorporados se evalúan en el interior y los comandos externos se llaman como si lo hiciera desde la línea de comandos local.fuente
-t
interruptor, pero aún así no cargará los archivos rc.sshd
(el servidor) está haciendo esto, nossh
(el cliente).