por que eu preciso de '-t' para 'ssh host bash' mas 'ssh host' executa muito bem

0

quando eu faço ssh host ele vai me logar em host e então executar o bash. mas quando eu faço ssh host bash ele vai ficar lá sentado fazendo aparentemente nada. para obter um prompt bash utilizável, eu tenho que fornecer -t assim: ssh -t host bash .

na verdade, não fica apenas sentado sem fazer nada. quando eu faço ssh host bash (sem -t ) parece que eu recebo um bash de trabalho, mas nenhum prompt. Eu posso fazer comandos como echo foo ou ps -ef e obterá saída utilizável. apenas sem aviso.

Por que eu preciso de -t para ssh host bash para obter um prompt bash utilizável, mas ssh host executa muito bem?

    
por lesmana 03.11.2017 / 18:24

1 resposta

4

Quando você executa:

ssh host some    command

ssh não solicita um tty remoto e o sshd é executado:

exec("remote-user-login-shell", ["remote-user-login-shell", "-c", "some command"])

Esse é o modo rsh . Quando você não especifica um comando, ele entra no modo rlogin , onde ele inicia um pseudo-terminal e executa uma sessão de shell interativo de login, onde é executado:

exec("remote-user-login-shell", ["-remote-user-login-shell"])

(com um - no argv[0] para dizer ao shell que ele deve se comportar como um shell de login).

Você precisa de -t quando precisar executar um comando específico de forma interativa (como bash ou vi ). Nesse caso, sshd cria um pseudo-terminal no host remoto. Se não, você não quer usar -t .

Em:

ssh host bash

bash não faz nada, apenas não é interativo. Ele processará a entrada da mesma forma que processaria um script ou como você obteria executando cat | bash . Você ainda pode inserir comandos e ver sua saída.

Historicamente, rsh (que ssh substituiu) estava executando rlogin quando não recebeu nenhum comando para executar, e rlogin estava chamando um serviço diferente (em uma porta TCP diferente) do rsh serviço.

    
por 03.11.2017 / 18:31

Tags