Quando o ssh -t não seria apropriado em vez do ssh?

15

Usar em ssh -tvez de sshpara conexões com servidores remotos tem várias vantagens. Por exemplo, eu posso editar diretamente um arquivo com o vim:, o ssh -t host vim foo.txtque falharia de outra forma.

Existe alguma circunstância sob a qual alocar um (pseudo) -tty seria uma coisa ruim ao usar o ssh?

Alex J
fonte

Respostas:

11

Ao canalizar a entrada ou recuperar a entrada, que é o uso típico do "comando ssh host". Os caracteres de controle podem ser interpretados pela camada TTY (^ S, por exemplo).

niXar
fonte
10

Sim, às vezes você deseja fazer uma conexão silenciosa e em segundo plano, por exemplo, ao configurar um túnel (por exemplo, proxy SOCKS). Nesses exemplos, você deseja que o processo NÃO tenha um tty.

Aqui está um exemplo de configuração do encaminhamento de porta do host local para algum host remoto ...

ssh -l username -fNTL 8073:server:873

Depois que isso for configurado, você poderá rsync no localhost, em vez de no host remoto, portanto, efetivamente, tunelando seu rsync via ssh...

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

Você faria isso dizendo se o rsync saindo serverestava bloqueado, mas sshnão estava.

Xerxes
fonte
Obrigado, isso também estava certo, mas votei no outro, pois era uma questão mais séria que eu ignorava.
287 Alex J
3

Além do exposto acima ...

(1) Manuseio de escape tilda diferente:

O "~". O escape desconectará você se você tiver um pty (-t). Para um comando de longa execução, você pode impedir que alguém interrompa acidentalmente o processo se digitar ~.

$ ssh hostname.tomontime.com -t sleep 60
[tipo ~. e desconecta] A
conexão com hostname.tomontime.com foi encerrada.

$ ssh hostname -T sleep 60
[digito ~. e trata-o como pressionamentos de tecla normais, que o comando sleep ignora.]
~.
~.

Tente a mesma coisa com CTRL-C. Você verá que, com -t, você está enviando o CTRL-C para o "suspensão". Com -T, você está enviando o CTRL-C para o programa ssh em execução na sua máquina. Pode haver momentos em que isso faz diferença (ou seja, o programa lida com INT de maneira diferente do HUP)

(2) Você apenas deseja minimizar a atividade de conexão de rede ou pty.

Ao tentar reiniciar uma máquina sem ptys, você não deseja incentivar o sistema a alocar um ptys! Isso também minimiza as conexões de rede que precisarão ser fechadas (atrasando a reinicialização).

Isso funcionará de maneira mais rápida e confiável:
ssh -T hostname reboot

Isso pode ter problemas:
ssh -t hostname reboot

TomOnTime
fonte
2

O ssh -t cria um pseudo terminal na máquina remota. Isso é útil se você estiver encadeando comandos ssh através de vários servidores e quiser um terminal real do outro lado (para que você possa usar o 'vi', por exemplo).

Você NÃO pode querer '-t' quando os scripts de login se comportarem de maneira diferente se houver um terminal. Esta é uma prática recomendada IMHO, mas já vi casos em que um script de logon verifica o TTY antes de 1) definir o prompt e 2) expandir o caminho para muitos aplicativos interativos.

Em outra instância (mencionada por TomOnTime acima), na verdade, já encontrei casos em que todos os TTY (ptys) são usados. Obviamente, é uma configuração incorreta, mas não é necessário procurar um recurso para vários túneis e rsyncs.

ericslaw
fonte