Força o ssh a sempre usar SSH_ASKPASS [duplicado]

9

Eu quero forçar o ssh a sempre usar o programa especificado por SSH_ASKPASS . No meu caso, o programa é apenas um script bash retornando a frase secreta.

O problema é, como diz a documentação do ssh:

If ssh needs a passphrase, it will read the passphrase from the current terminal if it was run from a terminal.

Portanto, se eu executar o ssh a partir de um terminal, SSH_ASKPASS será ignorado.

Existe uma pergunta semelhante: Informe ao SSH para usar um prompt gráfico para a senha chave

que propõe criar um alias para o ssh, como este

$ alias ssh="setsid ssh"

mas não funciona para mim, porque eu não chamo ssh diretamente, é chamado de git ou rsync.

Eu também encontrei um problema aberto no OpenSSH Bugzilla pedindo uma correção, mas foi aberto em 2002, então eu não acredito que vai ser implementado.

Estou pensando em soluções provavelmente estranhas:

  1. Crie um falso agente ssh, que chama o script e retorna a frase secreta.
  2. Crie um processo procurando novos processos ssh e desconecte-os do terminal antes que o ssh solicite a senha.

Qualquer sugestão melhor?

    
por José Luis 18.04.2014 / 20:29

2 respostas

2

A por ssh manual:

If ssh does not have a terminal associated with it but DISPLAY and SSH_ASKPASS are set, it will execute the program specified by SSH_ASKPASS.

Portanto, você precisa desassociar o terminal (por exemplo, adicionando um canal) e certificar-se de que DISPLAY não esteja definido (se você quiser usar o terminal para sua frase secreta).

Exemplo simples:

echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh ...

O mesmo com ssh-add :

$ echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh-add id_rsa
ssh_askpass: exec(/my/cmd): No such file or directory
    
por 13.10.2015 / 02:19
0

Infelizmente, não consigo acessar o problema aberto que você vinculou, mas tentei @npostavs 'sugestão (defina DISPLAY para algum valor) e parece funcionar 1 .

Por exemplo:

# List heads in a remote git repo
DISPLAY=: setsid git ls-remote -h [email protected]:NFL/tests.git

Onde

$ cat ${SSH_ASKPASS}
#!/bin/bash
echo ABCSuperPassword

Neste exemplo, SSH_AGENT é invocado por git (set GIT_TRACE=2 para saída do verboser) fornecendo efetivamente " ABCSuperPassword " como senha para a chave privada.

Notas

1 DISPLAY é frequentemente não definido se o login for feito em terminais remotos.

    
por 12.02.2016 / 10:14

Tags