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



Experimente Nosso Instrumento Para Eliminar Problemas

Na maioria dos casos, você receberá um erro confuso 'o 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, ele 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

Existem duas 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 conectar para forçar a alocação do pseudo-terminal. Por exemplo, digamos que você usaria ssh -p 80 appuals@ssh.example.com para fazer login em sua conta em example.com, o que, claro, é um fictício para documentação que não existe.



Tente correr, por exemplo ssh -t -t -R -p 80 appuals@ssh.example.com 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.



pseudoterminal

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 appuals@ssh.example.com e veja se funciona.

Este método desabilita todo o processo de alocação do pseudoterminal completamente, então pode funcionar em casos onde 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 muitas vezes 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 o usa, provavelmente não precisa 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 appuals@ssh.example.com 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 ao tty e então 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 desde que não veja nenhuma outra sobre os 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.

trabalhos interrompidos

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

Tag Linux como fazer ssh 3 minutos lidos