Controlar atribuições de pseudoterminal (/dev/pts/*)

Controlar atribuições de pseudoterminal (/dev/pts/*)

Existe alguma maneira de controlar qual pseudoterminal (/dev/pts/*) uma conexão é fornecida? Por exemplo, tenho vários thin clients, cada um executando sessões de terminal individuais em um servidor RHEL por SSH. Gostaria de configurar algo para que o thin client A seja sempre alocado /dev/pts/7 e o thin client B seja sempre /dev/pts /8. Tenho tentado criar uma regra do udev, mas o udevinfo só retorna "não foi possível obter o dispositivo de classe" quando o executo no ID do terminal. Não tenho certeza de como criar uma regra se o dispositivo não estiver realmente classificado no udev .

Responder1

O Linux normalmente usa a interface pseudoterminal Unix 98. As entradas /dev/ptssão atribuídas fora do controle do aplicativo. É aberta uma aplicação que deseja criar um pseudoterminal (aqui o servidor SSH) /dev/ptmx, que aloca um pseudoterminal e retorna um descritor de arquivo para ele. O número do pseudoterminal (o número após /dev/pts/) determinado quando o pseudoterminal é alocado; está vinculado ao índice do pseudoterminal em uma estrutura de dados do kernel.

(Se você estiver curioso, o código do kernel éptmx_openemdrivers/tty/pty.c, que convocadevpts_new_indexemfs/devpts/inode.c, que utilizaida_get_newemlib/idr.c. Isso retorna o primeiro número disponível, embora não haja garantia de que sempre o fará.)

Nem a API C nem a API do kernel permitem que o criador do pseudoterminal passe um parâmetro que possa influenciar o resultado.

Pode ser possível obter um pty estático usando a API BSD legada que produz ptys no formato (mestre) e (escravo). Isso exigiria, no mínimo, a recompilação do servidor SSH sem a configuração para forçá-lo a usar ptys no estilo BSD. Você precisaria cuidar das permissões, mas se o SSH for o único usuário, poderá ser um pouco mais fácil. Então você precisaria corrigir o OpenSSH para adicionar algum mecanismo para vincular um número específico a um cliente específico./dev/ptyNUM/dev/ttyNUMHAVE_DEV_PTMX

Eu recomendo fortemente isso: é uma configuração fora do padrão, exigindo que você escreva algum código extra. É um esforço extra de manutenção e um risco à segurança.

De qualquer forma, não vejo sentido. Você pode executar lastpara ver qual cliente está conectado em cada terminal.

informação relacionada