Confuso entre “comando echo | ssh server ”e“ comando do servidor ssh ”

6

Durante o curso de meu aprendizado sobre o shell de login não interativo, eu me deparei com duas maneiras de executar remotamente os comandos via SSH. Para mim, ambos parecem iguais. Mas infelizmente não são.

Com o comando echo "shopt login_shell; echo \$-" | ssh -l poweruser 192.168.1.67 , recebo a seguinte saída.

Pseudo-terminal will not be allocated because stdin is not a terminal.
[email protected]'s password:
login_shell     on 
hBs

Mas com o comando ssh -l poweruser 192.168.1.67 "shopt login_shell; echo \$-" , recebo uma saída diferente.

[email protected]'s password:
login_shell     off
hBc

Você poderia dizer por que o shell não é um shell de login no segundo caso, mesmo que ele solicite a senha.

    
por Karthik 30.07.2018 / 07:32

1 resposta

10

man ssh documentos que :

If a command is specified, it is executed on the remote host instead of a login shell.

A razão é que em um caso você especificou um comando e no outro não, e ssh deliberadamente (por design) se comporta de maneira diferente nesses casos.

Naquele em que você não forneceu um comando, um shell de login foi iniciado e leu a entrada canalizada e a executou. Naquela em que você forneceu um comando, ele foi lançado em seu lugar.

A solicitação da senha não está relacionada. Isso está autenticando você no servidor, antes que o shell ou o comando seja iniciado.

    
por 30.07.2018 / 07:37