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.