J'utilise Bash sur le client et le serveur. Lors de l'exécution d'une commande sur SSH:
ssh <host> 'declare'
donne une liste de variables shell.ssh <host> 'mount'
donne une liste de points de montage.
Cependant, declare
est une commande intégrée Bash, tandis que mount
est une commande externe. Comment SSH sait-il quoi exécuter s'il y a un shell intégré et une commande externe portant le même nom sur le serveur?
/etc/passwd
. Si c'est le cas,/usr/sbin/nologin
vous ne pouvez pas vous connecter.Réponses:
L'
ssh
exécute les commandes que vous fournissez dans le shell de l'utilisateur distant (obtenues à partir de/etc/passwd
), comme visible dans le code source :Par conséquent, les commandes respectives qui sont exécutées pour votre exemple sur le serveur distant sont:
bash -c declare
bash -c mount
Les deux sont transmis au
bash
et évalués. Les fonctions intégrées sont évaluées à l'intérieur et les commandes externes sont appelées comme si vous le faisiez à partir de votre invite de ligne de commande locale.la source
-t
commutateur, mais il ne chargera toujours pas les fichiers rc.sshd
(le serveur) fait cela, passsh
(le client).