Qual é o propósito de um pseudo-tty?


Melhor resposta

A execução de programas em um terminal oferece uma funcionalidade extra que não existe quando você executa programas em lote . Por exemplo, se você executar um processo no terminal, você pode interrompê-lo pressionando Ctrl + C, mas se um processo não estiver associado a nenhum terminal, você não pode interrompê-lo com Ctrl + C, em vez disso você provavelmente teria para executar kill ou algo parecido. Os terminais são explicados com mais detalhes nesta resposta.

O processo sshd remoto usa um par de pseudoterminal para assumir a função de teclado e tela. Se o processo remoto estava lendo de um terminal “verdadeiro”, como /dev/tty1, ele obteria sua entrada diretamente do teclado. Em vez disso, o processo sshd passa seus pressionamentos de tecla para o processo remoto, gravando-os na extremidade mestre do pseudo-terminal. O programa que você está executando então recebe dados na extremidade escrava do pseudoterminal, como se viessem do teclado. Da mesma forma, quando o processo grava na extremidade escrava do pseudoterminal, tem a ilusão de que “está escrevendo em um terminal” verdadeiro “que imprimiria caracteres em uma tela. Mas, em vez disso, sshd lê os dados gravados na extremidade mestre, criptografa-os e os envia de volta para você pela rede.

Para ver o que acontece sem um terminal , tente executar algo como ssh -T remote.host. Ele iniciará o shell no host remoto, mas o shell não se incomodará em imprimir um prompt porque não possui um terminal, então pensa que está sendo executado no modo batch. Você também “não será capaz de executar sudo no host remoto porque sudo exige que a senha seja digitada em um terminal em vez de ler a partir da entrada padrão.

Por padrão, o sshd remoto alocará um pty apenas quando você não especificar um comando. Se você tentar ssh remote.host screen, verá que a especificação do comando suprime a alocação pty e terá problemas novamente. Para evitar isso, especifique a opção -t e o sshd remoto sempre tentará alocar um terminal.

… a menos que não haja um terminal na extremidade local para conversar, como se ssh estivesse lendo um arquivo. Nesse caso, você pode forçar a alocação de pty usando ssh -t -t. Isso pode ter alguns efeitos indesejados, porque a extremidade remota reagirá a cada byte escrito na entrada padrão de ssh “como se tivesse sido digitada no teclado. Por exemplo, Ctrl + C em o teclado produz o código ASCII 3, portanto, se o ssh local por acaso ler um byte com o valor 3 de seu arquivo de entrada, ele o passará para o host remoto, o remote sshd irá gravá-lo na extremidade mestre do pty, e o kernel enviará SIGINT para a leitura do processo da extremidade escrava. Terminais são criaturas interessantes.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *