J'ai vu les questions et réponses sur la nécessité de double-échapper aux arguments des commandes ssh distantes. Ma question est: exactement où et quand la deuxième analyse est-elle effectuée?
Si je lance ce qui suit:
$ ssh otherhost pstree -a -p
Je vois ce qui suit dans la sortie:
|-sshd,3736
| `-sshd,1102
| `-sshd,1109
| `-pstree,1112 -a -p
Le processus parent de la commande distante ( pstree
) est sshd
, il ne semble pas y avoir de shell qui analyserait les arguments de la ligne de commande à la commande distante, il ne semble donc pas que des guillemets doubles ou des échappements soient nécessaires ( mais c'est certainement). Si au lieu de cela, je ssh d'abord et obtenez un shell de connexion, puis exécutez, pstree -a -p
je vois ce qui suit dans la sortie:
├─sshd,3736
│ └─sshd,3733
│ └─sshd,3735
│ └─bash,3737
│ └─pstree,4130 -a -p
Il est donc clair qu'il y a un bash
shell qui ferait une analyse de ligne de commande dans ce cas. Mais dans le cas où j'utilise directement une commande à distance, il ne semble pas y avoir de shell, alors pourquoi la citation double est-elle nécessaire?