Indique ao SSH para usar um prompt gráfico para a senha chave

33

Como posso forçar o SSH a solicitar senhas usando um prompt gráfico (GTK, por exemplo) em vez do padrão que usa o terminal?

Eu tentei definir SSH_ASKPASS=/usr/bin/ssh-askpass , mas parece não ter efeitos.

O problema é o fato da documentação do openssh dizer

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 and open an X11 window to read the passphrase.

Um ssh lançado a partir da linha de comando, no meu caso como resultado de um git push , irá ter um terminal associado a ele, então a lógica SSH_ASKPASS parece ser ignorada. / p>

Por favor, note que não estou me referindo a ssh-add , mas a invocações genéricas de ssh em relação a hosts para os quais um par de chaves está presente, mas protegido por uma frase secreta.

    
por gioele 22.07.2013 / 17:43

4 respostas

5

Não pode ser feito no OpenSSH atual: há um problema aberto no Bugzilla do OpenSSH solicitando este recurso a partir de 2013-07: Generalize o SSH_ASKPASS .

    
por 23.07.2013 / 10:22
27

# 1 - Pacote ausente?

Você provavelmente está perdendo o pacote que contém ssh-askpass . Tente instalá-lo.

Fedora / CentOS / RHEL:

$ sudo yum install openssh-askpass

Debian / Ubuntu:

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

Encontrando utilitários ausentes

Você pode procurar ferramentas ausentes usando estes comandos:

Fedora / CentOS / RHEL:

$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X

Debian / Ubuntu:

$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome

# 2 - terminal desconectado?

Eu perdi isso inicialmente, mas depois de ler mais, notei esse comentário na página de manual de ssh sobre a variável de ambiente SSH_ASKPASS .

trecho

SSH_ASKPASS    If ssh needs a passphrase, it will read the passphrase from the 
               current terminal if it was run from a terminal.  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 
               and open an X11 window to read the passphrase. This is particularly
               useful when calling ssh from a .xsession or related script.  
               (Note that on some machines it may be necessary to redirect the 
               input from /dev/null to make this work.)

Se você perceber no comentário, ele afirma que o ssh "não tem um terminal associado" AND DISPLAY & SSH_ASKPASS estão definidos. Percebendo isso é fundamental. Portanto, para obter ssh para usar SSH_ASKPASS , precisamos obter ssh para não ter um terminal (também conhecido por. STDIN & STDOUT ) anexado a ele.

Uma maneira de fazer isso usando o comando setsid . Não se sinta mal. Eu nunca ouvi falar dessa ferramenta também. Na página do manual:

setsid - run a program in a new session

Portanto, se executarmos ssh como o "programa" para setsid , poderemos desanexar ssh de nosso terminal atendendo aos critérios mencionados na man page de ssh . Os outros critérios são definidos da seguinte forma:

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

Então, se juntarmos tudo isso:

$ setsid ssh user@remotehost

Por exemplo:

$ setsid ssh user@skinner

Umasolução

Sevocêquiserfazercomqueosetsidseja"interno", crie aliases assim:

$ alias ssh="setsid ssh"

Agora, quando você ssh obterá a interface gráfica solicitando sua senha:

$ ssh user@skinner

Referências

por 22.07.2013 / 19:03
1

Existe uma maneira de fechar o terminal para um único comando, ou seja, usando o redirecionamento de arquivos:

ssh-add > /dev/null < /dev/null 2>&1

Isso executará o comando ssh-add com o terminal fechado. O que é bom e elegante, exceto pela complexidade. Mas agora que você sabe o comando correto, basta criar um alias e anexá-lo a ~/.bash_aliases :

alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"

E você deve estar definido. Basta digitar ssh-add para invocar o alias que invocará o comando real com todo o redirecionamento em vigor.

O ssh-add agora pergunta corretamente a senha com uma caixa de diálogo ... Desde que você tenha um desses pacotes instalados (no Ubuntu ou derivados, eles podem ter outros nomes em outro lugar):

  • ssh-askpass
  • ssh-askpass-fullscreen
  • ssh-askpass-gnome
  • ksshaskpath
  • kwalletcli
  • lxqt-openssh-askpass
  • razorqt-openssh-askpasss

Agora, o que todas essas coisas significam?

O 2>&1 significa o descritor de arquivo de redirecionamento # 2 (erro padrão) para o mesmo descritor de arquivo de local # 1 (saída padrão) é direcionado para.

O > /dev/null significa redirecionar a saída padrão para /dev/null , que é um arquivo especial que descarta todos os dados gravados nela.

O < /dev/null significa redirecionar a entrada padrão para /dev/null (idem).

Como uma nota secundária, e um tópico off, mas uma nota relacionada, se você quiser programar um serviço no bash, você deve lembrar o que um serviço realmente é, um processo com entrada, saída e erro padrão que está em o fundo:

service > /dev/null < /dev/null 2>&1 &

Observe que a única diferença é o & adicionado no final (mais o fato de que eu mudei o comando ssh-add para um teórico service . Esses comandos irão colocar corretamente um serviço em segundo plano.

    
por 19.03.2017 / 21:26
0

Eu tive o mesmo problema quando instalei o seahorse (que fornece seahorse-ssh-askpass ) sem instalar o pacote gnome-keyring no ArchLinux.

Olhando para o conteúdo deste pacote gnome-keyring ( link ) pode ajudá-lo a resolver seu problema.

Em qualquer caso, se você não se importar em usar cavalos-marinhos, também poderá instalar os pacotes seahorse e gnome-keyring (ou os equivalentes para sua distribuição). Se você não usa o Gnome, etapas adicionais podem ser necessárias: link .

    
por 07.08.2013 / 18:31

Tags