Como evitar que o ssh interprete comandos remotos como um host?

1

Eu configurei um par de chaves SSH dedicado com o objetivo de forçar um comando específico em um servidor remoto. Eu adicionei a chave pública ao arquivo authorized_keys do servidor remoto junto com uma opção de comando especificando o comando a ser executado quando esta chave é usada. O comando é um script de shell que requer um único argumento de linha de comando que estou esperando passar na variável de ambiente $SSH_ORIGINAL_COMMAND .

Quando executo o comando ssh do cliente e especifico o uso dessa chave específica como esta:

ssh -i id_rsa_mykey -o User=abc -o HostName=myhost xxx

O script remoto é executado como esperado e recebe o xxx na variável SSH_ORIGINAL_COMMAND .

Se eu tentar passar um endereço de e-mail ao comando remoto, o controle remoto sshd interpretará o valor como user@host e parecerá tentar autenticação na parte antes do símbolo @ e o comando remoto nunca será executado . /var/log/auth.log no servidor remoto tem o erro:

Invalid user xxx from 192.168.0.1

Como posso escapar do símbolo @ ou não ter sshd avaliando o valor como user@host e, em vez disso, passar o valor como está para o comando remoto?

Eu tentei as duas tentativas de barra invertida escaparem do símbolo @ , bem como usando -- antes do argumento, mas sshd não parece suportar esta convenção de fim de argumentos.

  • A máquina cliente está executando o Ubuntu com ssh versão OpenSSH_7.2p2.
  • A máquina do servidor está executando o Debian com sshd versão OpenSSH_6.7p1
por Bob 09.07.2016 / 08:18

1 resposta

0

Suponho que você tenha suas razões para usar -o User=abc -o HostName=myhost over abc@myhost .

… however the remote sshd is interpreting the value as a user@host and appears to …

Não, acho que é o seu local ssh que interpreta isso.

No meu Debian, o primeiro argumento que não pode ser interpretado como uma opção é interpretado por ssh as host ou user@host , dependendo se o @ está lá ou não. Depois disso, nenhum outro argumento é interpretado dessa maneira, mesmo que haja @ nele.

Agora algumas observações:

  • user de user@host tem precedência sobre -o User=abc ,
  • mas host (autônomo ou de user@host ) é suprimido por -o HostName=myhost .

Conclusão: ao usar -o HostName=myhost , host não importa. Isso possibilita o seguinte:

ssh -i id_rsa_mykey -o User=abc -o HostName=myhost dummy_host foo@bar

Graças à presença de dummy_host , foo@bar é passado para o lado remoto como um comando, mesmo que inclua @ character. Ainda ssh conecta-se a myhost , não dummy_host , porque -o HostName=myhost tem precedência.

Nota: dummy_host pode ou não ser myhost . Pode até estar em branco ( "" ).

    
por 09.05.2018 / 08:57