Controle pseudo-terminais (/ dev / pts / *) atribuições

2

Existe alguma maneira de controlar qual pseudo-terminal (/ dev / pts / *) uma conexão é dada? Por exemplo, eu tenho vários thin clients cada executando sessões de terminal individuais para um servidor RHEL por SSH, gostaria de configurar algo para que o thin client A esteja sempre alocado / dev / pts / 7 e o thin client B seja sempre / dev / pts / 8. Eu tenho tentado criar uma regra do udev, mas o udevinfo retorna apenas "não consegui o dispositivo de classe" quando eu o executo com o ID do terminal, não sei como criar uma regra se o dispositivo não estiver realmente classificado no udev .

    
por Jeremy T. 02.11.2015 / 21:44

1 resposta

3

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

(Se você está curioso, o código do kernel é ptmx_open em drivers/tty/pty.c , que chama devpts_new_index em fs/devpts/inode.c , que usa ida_get_new em lib/idr.c Isso acontece para retornar o primeiro número disponível, embora não haja garantia de que ele sempre o fará.

Nem a API C nem a API do kernel permitem que o criador do pseudo-terminal transmita um parâmetro que influenciaria o resultado.

Pode ser possível obter um arquivo estático usando a API BSD legada que produz ptys na forma /dev/ptyNUM (master) e /dev/ttyNUM (slave). Isso exigiria, no mínimo, a recompilação do servidor SSH sem a configuração HAVE_DEV_PTMX configure 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. Em seguida, você precisaria corrigir o OpenSSH para adicionar algum mecanismo para vincular um determinado número de arquivos a um determinado cliente.

Eu recomendaria strongmente contra isso: é uma configuração não padrão, exigindo que você escreva algum código extra. É um esforço extra de manutenção e um risco de segurança.

Eu não vejo o ponto de qualquer maneira. Você pode executar last para ver qual cliente está logado atualmente em cada terminal.

    
por 02.11.2015 / 22:25