ssh ForceCommand vs. ProxyCommand

3

Eu preciso ter um grupo de usuários usando um servidor ('bastion') em outra máquina ('dest') via ssh para confirmar o código.

Parece que minhas opções são:

  1. diz aos usuários para usar ProxyCommand em seu arquivo .ssh / config, algo como:

    Host dest e ProxyCommand ssh -q bastion nc -q0 dest 22

  2. use ForceCommand no arquivo de configuração sshd, como

    Match Group hopUsers e ForceCommand ssh dest $SSH_ORIGINAL_COMMAND

  3. use a opção command no arquivo .ssh/authorized_keys users, como

    command="ssh dest"

A primeira solução é ótima, funciona com commits mercuais, etc. - O problema é que eu não quero dar aos meus usuários um shell válido na máquina bastion . Eu poderia definir o shell de login como / bin / false, mas isso deixa um conjunto inteiro de problemas sem supervisão (consulte aqui ) - a menos que talvez acoplado a um conjunto dedicado de opções (como noX11Forwarding) no arquivo sshd config, dentro de uma estrofe Match .

O problema com a segunda e terceira solução é que a autenticação de chave pública é "perdida", isto é, a menos que o cliente use a opção -A ao iniciar o ssh, o servidor responderá com:

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: .ssh/XXXXXX
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_ALL = en_US.UTF-8
debug1: Sending env LANG = en_US.UTF-8

Por isso, solicitando a senha do usuário. Isso não é aceitável.

Acho que há algo que pode ser feito com nc no modo de proxy, mas parece que não consigo fazê-lo funcionar.

Qualquer ajuda seria muito apreciada.

    
por lorenzog 21.02.2012 / 17:33

1 resposta

3

A solução acabou sendo:

No lado do cliente, em .ssh/config :

Host dest
    ProxyCommand ssh -q bastion

No lado do servidor, em sshd_config :

Match Group hopUsers
        ForceCommand nc -q0 dest port

Os usuários ' authorized_keys no servidor não precisam de command= .

Agora, se um usuário tentar fazer qualquer outra coisa (por exemplo, inicia o ssh sem o ProxyCommand), tudo o que obtém é a saída do netcat

$ ssh user@bastion
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1.2

Obrigado ao pessoal do #openssh no freenode.

    
por 22.02.2012 / 12:33

Tags