Correção: o pseudoterminal não será alocado porque stdin não é um terminal

Na maioria dos casos, você receberá um erro confuso “pseudoterminal não será alocado porque stdin não é um terminal” apenas quando estiver executando algum tipo de comando SSH a partir de um script. Se você estiver executando o mesmo comando na linha de comando, pode funcionar perfeitamente bem.

Antes de prosseguir, certifique-se de adicionar sua chave pública ao agente SSH e tente usar o ssh novamente. Você pode apenas ter perdido uma chave. Por outro lado, se isso não funcionar, você precisará solucionar um pouco o seu script.

Método 1: Forçar e desativar a alocação de pseudo-tty

Há um par de opções de linha de comando que podem resolver o problema rapidamente para você. Tente ssh -t -t -R seguido pelo resto do que você estava tentando se conectar para forçar a alocação do pseudoterminal. Por exemplo, digamos que você fosse usar ssh -p 80 [email protected] para fazer login em sua conta em example.com, o que, obviamente, é um fictício para documentação que não existe.

Tente executar, por exemplo, ssh -t -t -R -p 80 [email protected] e veja se isso corrige o problema. Obviamente, você precisará substituir o nome por sua conta e nome de host reais para fazer o login com sucesso no sistema. Isso força a alocação de um terminal, então você não deve ver que o pseudoterminal não será alocado porque stdin não é um erro de terminal.

Por outro lado, você pode acabar com uma sequência constante de mensagens de erro. Alguns usuários comentaram que isso pode ser considerado divertido.

É certamente frustrante de qualquer maneira, então use Ctrl + C para encerrar o processo.

Você pode tentar usar apenas uma opção -t ou aumentar o número. Se isso não funcionar, substitua qualquer opção -t por uma opção -T no comando, por exemplo, ssh -T -R -p 80 [email protected] e veja se funciona.

Este método desativa todo o processo de alocação do pseudoterminal completamente, então ele pode funcionar nos casos em que forçá-lo não funciona. Claro, nada disso deve ser um problema na linha de comando, mas certifique-se de tomar nota quando descobrir qual opção funciona em seu script, para que possa usá-la em quaisquer scripts futuros que precise executar para acessar esse servidor.

Como o comando ssh deu a essas duas opções opostas nomes semelhantes, lembre-se de que -t força a alocação de pseudo-terminais, enquanto -T a desativa. Essas opções diferenciam maiúsculas de minúsculas e geralmente são necessárias dentro dos scripts porque o ssh precisa de um terminal TTY tradicional para funcionar. Naturalmente, no seu caso, você usaria o emulador de terminal para essa finalidade.

Método 2: usando sshpass

Algumas pessoas podem descobrir que seus scripts funcionam melhor com o comando sshpass, que não é incluído por padrão. Você sempre pode instalá-lo com sudo apt-get install sshpass ou sudo yum install sshpass se preferir tentar ou porque precisa para seu caso de uso específico.

Se você ainda não estiver usando, provavelmente não precisará dele. No entanto, você pode usar as mesmas técnicas para surpreender mensagens de erro relacionadas à alocação de pseudoterminal neste tipo de ambiente.

Por exemplo, use sshpass -p senha ssh -T [email protected] para forçar o sistema a funcionar de dentro de seu script.

Método 3: corrigindo erros de gerenciamento de trabalho

Ocasionalmente, você pode receber outra mensagem de erro mesmo depois de consertar tudo isso. Se você estiver recebendo um aviso informando que não há acesso a tty e for lembrado de que não há controle de trabalho em seu shell, você deve conseguir trabalhar normalmente.

Este erro é causado por algo irregular no servidor remoto relacionado ao csh, tcsh ou possivelmente até mesmo ao Almquist ou outro shell. Você pode não ter notado porque estava recebendo outras mensagens de erro, mas contanto que não veja nenhuma outra sobre pseudoterminais, deve ser possível continuar relativamente como faria normalmente.

Você pode não querer tentar usar Ctrl + Z neste caso para interromper os processos, porque pode não haver maneira de reiniciá-los novamente. Se você receber uma mensagem de erro informando que há trabalhos interrompidos quando você sair, não terá permissão para fazer logout.

Use os comandos ps e kill para fechar todos os trabalhos que você não pode fechar, supondo que você não se importe em perder trabalho no processo. Você poderá sair agora.

Tags Linux como fazer ssh