A principal diferença é o conceito de interatividade . É semelhante a executar comandos localmente dentro de um script, em vez de digitá-los por conta própria. É diferente em que um comando remoto deve escolher um padrão e não interativo é mais seguro. (e geralmente mais honesto)
STDIN
- Se um PTY for alocado, os aplicativos poderão detectar isso e saber que é seguro solicitar ao usuário uma entrada adicional sem quebrar as coisas. Existem muitos programas que ignoram a etapa de solicitar a entrada do usuário, se não houver um terminal presente, e isso é bom. Isso faria com que os scripts fossem interrompidos desnecessariamente.
- Sua entrada será enviada ao servidor remoto pela duração do comando. Isso inclui seqüências de controle. Embora uma quebra de
Ctrl-c
normalmente faça com que um loop no comando ssh seja interrompido imediatamente, suas seqüências de controle serão enviadas ao servidor remoto. Isso resulta na necessidade de "martelar" o pressionamento de tecla para garantir que ele chegue quando o controle deixar o comando ssh, mas antes que o próximo comando ssh seja iniciado.
Gostaria de evitar o uso de ssh -t
em scripts não assistidos, como crons. Um shell não interativo solicitando que um comando remoto se comporte interativamente para a entrada está pedindo por todos os tipos de problemas.
Você também pode testar a presença de um terminal em seus próprios scripts de shell. Para testar o STDIN com versões mais recentes do bash:
# fd 0 is STDIN
[ -t 0 ]; echo $?
STDOUT
- Ao aliasing
ssh
tossh -t
, você pode esperar obter um retorno de carro extra nas extremidades de sua linha. Pode não ser visível para você, mas está lá; Ele aparecerá como^M
quando canalizado paracat -e
. Você deve então despender o esforço adicional de garantir que esse código de controle não seja atribuído às suas variáveis, especialmente se você for inserir essa saída em um banco de dados. - Existe também o risco de os programas assumirem que podem renderizar uma saída que não seja amigável para o redirecionamento de arquivos. Normalmente, se você redirecionar o STDOUT para um arquivo, o programa reconhecerá que o seu STDOUT não é um terminal e omite qualquer código de cores. Se o redirecionamento STDOUT for da saída do cliente ssh e houver um PTY associado à extremidade remota do cliente, os programas remotos não poderão fazer tal distinção e você acabará com o lixo do terminal. no seu arquivo de saída. Redirecionar a saída para um arquivo na extremidade remota da conexão ainda deve funcionar como esperado.
Aqui está o mesmo teste bash de antes, mas para STDOUT:
# fd 1 is STDOUT
[ -t 1 ]; echo $?
Embora seja possível contornar esses problemas, você inevitavelmente se esquecerá de criar scripts em torno deles. Todos nós fazemos em algum momento. Os membros da sua equipe também podem não perceber / lembrar que esse alias está em vigor, o que, por sua vez, criará problemas para você quando eles escrevem scripts que usam seu alias.
Aliasing ssh
to ssh -t
é um caso em que você estará violando o princípio de design de menos surpresa ; as pessoas encontrarão problemas que não esperam e podem não entender o que as está causando.