Como o ssh executa um comando?

15

Estou usando o Bash no cliente e no servidor. Ao executar um comando através do SSH:

  • ssh <host> 'declare' fornece uma lista de variáveis do shell.

  • ssh <host> 'mount' fornece uma lista de pontos de montagem.

No entanto, declare é um Bash incorporado, enquanto mount é um comando externo. Como o SSH sabe qual executar se houver um shell embutido e um comando externo com o mesmo nome no servidor?

    
por Cyker 23.12.2016 / 22:19

1 resposta

22

O ssh executa os comandos que você fornece no shell do usuário remoto (obtido de /etc/passwd ), como é visível no código da fonte :

argv[0] = (char *) shell0;
argv[1] = "-c";
argv[2] = (char *) command;
argv[3] = NULL;
execve(shell, argv, env);

Portanto, os respectivos comandos que são executados para o seu exemplo no servidor remoto são:

  • bash -c declare
  • bash -c mount

Ambos são passados para o bash e avaliados. Os built-ins são avaliados internamente e os comandos externos são chamados como se você fizesse isso a partir do prompt de linha de comando local.

    
por 23.12.2016 / 22:25

Tags