Estou usando o Bash no cliente e no servidor. Ao executar um comando sobre SSH:
ssh <host> 'declare'
fornece uma lista de variáveis de shell.ssh <host> 'mount'
fornece uma lista de pontos de montagem.
No entanto, declare
é um Bash embutido, enquanto mount
é um comando externo. Como o SSH sabe qual executar se houver um shell interno e um comando externo com o mesmo nome no servidor?
/etc/passwd
. Se for/usr/sbin/nologin
você não pode logar.Respostas:
A
ssh
executa os comandos fornecidos no shell do usuário remoto (obtido a partir do/etc/passwd
), como visível a partir do código-fonte :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
bash
e avaliados. Os internos são avaliados internamente e os comandos externos são chamados como se você fizesse isso no prompt de linha de comando local.fonte
-t
switch, mas ele ainda não carregará os arquivos rc.sshd
(o servidor) está fazendo isso, nãossh
(o cliente).