Como posso fazer o programa unix 'pass' ser legal com 'ssh' dentro do Linux Virtual Terminal?

1

Estou tentando fazer login em um servidor ssh, puxando a senha diretamente do programa pass sem nenhuma interação da GUI.

O fluxo de trabalho normal na GUI (Gnome) é fazer o seguinte.

  1. Puxe a senha para a área de transferência: pass -c Misc/MyAccount
  2. Faça o programa ssh e cole usando a área de transferência da GUI

    ssh myserver
    Right-Click + Paste
    

Como eu queria fazer isso sem o componente GUI, imaginei que poderia fazer algo assim

 pass Misc/MyAccount | ssh myserver

Obviamente, isso não funciona porque ssh não precisa ler a senha de stdin . Eu encontrei esta questão e criei o script a seguir .

export SSH_ASKPASS="/path/to/script/calling/pass"
setsid ssh "myserver"

Isso funciona muito bem quando estou rodando dentro de gnome-terminal dentro da GUI.

No entanto, ele falha no Linux Virtual Terminal (do Control-Alt-F1) porque o prompt de senha para pass não pode aparecer como normalmente (diretamente no terminal), então o login simplesmente falha.

Como posso fazer isso funcionar no terminal virtual do Linux?

Comportamento Desejado

  1. Execute o script acima.
  2. Veja a solicitação da senha para o programa pass .
  3. Faça o login com sucesso sem digitar a senha manualmente no ssh server.
por merlin2011 28.05.2015 / 23:19

1 resposta

0

Existem alguns requisitos para que funcione:

  • Você precisa definir algo (qualquer coisa serve) na variável de ambiente DISPLAY para ativar o recurso SSH_ASKPASS .
  • Você precisa do programa pinentry de gpg-agent e tty. Nos sistemas Debian / Ubuntu, execute apt-get install pinentry-curses e use /usr/bin/pinentry-curses .

Execute o script da seguinte forma:

export DISPLAY=anything
export SSH_ASKPASS="/path/to/script/calling/pass"
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid ssh myserver

Note que setsid do util-linux em distribuições recentes (Debian 8.0 ou posterior, Ubuntu 14.10 ou posterior) precisa de -w para esperar pelo término do subprocesso, caso contrário você será confundido com uma sessão ssh rodando em segundo plano .

gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid -w ssh myserver
    
por 29.05.2015 / 08:23