Não. Tudo em uma sessão ssh é criptografado. Como você propõe que o proxy possa espionar o nome de usuário?
Estou tentando migrar entre dois servidores ssh com base no nome de usuário recebido, por exemplo
ssh user1 @ testserver irá para uma instância sshd e user2 @ testserver irá para outra.
Isso pode ser feito?
Acho que você pode fazer isso com ForceCommand
, como:
ForceCommand proxyscript
em / etc / sshd / sshd_config. Aqui proxyscript
seria um script personalizado que seria ssh para qualquer que seja o próximo servidor, dependendo de qual usuário o está executando. O script teria informações suficientes para fazer isso, porque de acordo com a página man do sshd_config, ele será executado sob o shell de login do usuário, portanto, por exemplo, $ USER estará disponível.
Se você tem apenas um conjunto pequeno e fixo de usuários para o qual você deseja fazer isso, então você pode configurar tudo em sshd_config com por exemplo
Match User user1
ForceCommand ssh user1@host1
Match User user2
ForceCommand ssh user2@host2
Mas não sei se isso conectaria corretamente a entrada / saída padrão da conexão de entrada ao padrão in / out do novo comando ssh.
Isso é bastante simples de fazer de forma transparente (talvez ajustar um programa de honeyp do SSH para auto-login e, em seguida, usar ForceCommand
para lidar com o proxy? parece confuso), mas você pode configurar um proxy e instruir seus usuários sobre como usá-lo facilmente.
Esse conceito é chamado de host de bastiões do SSH . Nenhum software especial é necessário no proxy (o bastião). O único software que os usuários finais precisam acessar é o netcat ( nc
), então você pode criar uma cadeia bastante simples para eles, se quiser.
Cada usuário do OS X / Linux / BSD / UNIX teria uma entrada no arquivo ~/.ssh/config
(em seus clientes locais, não no bastião) que se parece com isso:
Host MYSERVER
ProxyCommand ssh BASTION nc -w 600 USER1_SERVER 22
A configuração de cada usuário só diferiria no servidor de destino (por exemplo, USER1_SERVER), que está conectado na rede local pelo bastião. (Se os nomes dos usuários forem diferentes, considere ProxyCommand ssh BASTION_USERNAME@BASTION nc -w 600 USER1_SERVER_USERNAME@USER1_SERVER 22
.)
Isso é tudo que existe para isso. Agora USER1 pode executar ssh MYSERVER
. Se não estiver usando as chaves SSH, será solicitada a USER1 uma senha para BASTION e, em seguida, uma senha para o sistema interno USER1_SERVER. Se estiver usando chaves SSH e a chave pública de USER1 estiver instalada em BASTION e USER1_SERVER, o login será automático.
Usuários do Windows podem fazer isso através do PuTTY usando plink
(uma parte do PuTTY). Aqui está um guia .
Se você quiser restringir o usuário no bastião, faça isso:
Match User user1
ForceCommand nc -w 600 USER1_SERVER 22
... embora isso impeça o usuário1 de gerenciar seu arquivo authorized_keys no bastião.