Ao pipilar a entrada ou recuperar a entrada, que é o uso típico do "comando host ssh". Caracteres de controle podem ser interpretados pela camada TTY (^ S por ex.)
Usar ssh -t
em vez de ssh
para conexões com servidores remotos tem várias vantagens. Por exemplo, posso editar diretamente um arquivo com o vim: ssh -t host vim foo.txt
, o que falharia de outra forma.
Há alguma circunstância em que a alocação de uma (pseudo) -tty seria uma coisa ruim ao usar o ssh?
Sim, às vezes você deseja estabelecer uma conexão silenciosa com o segundo plano, por exemplo, ao configurar um túnel (por exemplo, proxy SOCKS). Em tais exemplos, você quer que o processo NÃO tenha um tty.
Aqui está um exemplo de como configurar o encaminhamento de porta do host local para algum host remoto ...
ssh -l username -fNTL 8073:server:873
Após isso ter sido configurado, você poderá rsync para localhost, em vez de para o host remoto, portanto, efetivamente, encapsulando seu rsync via ssh
...
rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/
Você faria isso dizendo se o rsync saindo para server
estava bloqueado, mas ssh
não estava.
Além do acima ...
(1) Manuseio de escape tilda diferente:
O "~". escape irá desconectá-lo se você tiver um pty (-t). Para um comando de longa duração, você pode impedir que alguém interrompa acidentalmente o processo, se ele digitar ~.
$ ssh hostname.tomontime.com -t sleep 60
[type ~. e desconecta]
Conexão para hostname.tomontime.com fechado.
$ ssh hostname -T sleep 60
[Eu digito ~. e trata-o como teclas normais, que o comando sleep ignora.]
~.
~.
Tente a mesma coisa com CTRL-C. Você verá isso com -t você está enviando o CTRL-C para o "sono". 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 o INT de maneira diferente do HUP)
(2) Você só quer minimizar a atividade de conexão de rede ou de rede.
Ao tentar reinicializar uma máquina que esteja fora do pty, você não quer encorajar o sistema a tentar alocar um pty! Isso também minimiza as conexões de rede que terão que 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
ssh -t cria um pseudo terminal na máquina remota. Isto é útil se você estiver encadeando comandos ssh através de múltiplos servidores e quiser um terminal real no lado distante (assim você poderia usar 'vi' por exemplo).
Você pode NÃO querer '-t' quando os scripts de login se comportarem de maneira diferente se houver um terminal. Esta é uma má prática IMHO, mas eu vi casos em que um script de login verifica TTY antes 1) definindo o prompt e 2) expandindo o caminho para muitos aplicativos interativos.
Em outro exemplo (mencionado por TomOnTime acima), eu realmente encontrei casos em que todos os TTY (ptys) foram usados. Obviamente, uma configuração incorreta, mas não há necessidade de consertar um recurso para vários túneis e rsyncs.