# 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
Localizando utilitários ausentes
Você pode procurar por 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 ssh
sobre a SSH_ASKPASS
variável de ambiente.
excerto
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ê notar no comentário, ele afirma que ssh "não possui um terminal associado" AND DISPLAY
& SSH_ASKPASS
está definido. Perceber que isso é fundamental. Portanto, para ssh
usar SSH_ASKPASS
, precisamos ssh
não ter um terminal (aka. STDIN
& STDOUT
) Conectado a ele.
Uma maneira de fazer isso, fazendo uso do comando setsid
. Não se sinta mal. Também nunca ouvi falar dessa ferramenta. Na página do manual:
setsid - executa um programa em uma nova sessão
Portanto, se rodarmos ssh
como o "programa" setsid
, podemos desconectar ssh
do nosso terminal atendendo aos critérios mencionados na ssh
página do manual. Os outros critérios são definidos da seguinte maneira:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
Então, se colocarmos tudo isso junto:
$ setsid ssh user@remotehost
Por exemplo:
$ setsid ssh user@skinner
Uma solução
Se você deseja torná-lo setsid
"embutido", é possível criar um alias como:
$ alias ssh="setsid ssh"
Agora, quando ssh
a GUI aparecer, solicitando sua senha:
$ ssh user@skinner
Referências
setsid ssh
instad of plainssh
.ssh
por aliases,setsid ssh
é uma abordagem. Existem outras maneiras. O fator limitante é o openssh não precisa de TTY anexado para ativar o ASK_SSHPASS.setsid
e depois trabalhar nossh
meu terminal. Isso não é uma resposta válida !? Além disso, ele estava funcionando em versões mais antigas do Ubuntu, então não tenho muita certeza de entender por que de repente parou de funcionar!Isso não pode ser feito no OpenSSH atual: existe um problema em aberto no OpenSSH Bugzilla solicitando esse recurso a partir de 2013-07: Generalize SSH_ASKPASS .
fonte
Existe uma maneira de fechar o terminal para um único comando, e usando o redirecionamento de arquivo:
Isso executará o comando
ssh-add
com o terminal fechado. O que é bom e elegante, exceto pela complexidade. Mas agora que você conhece o comando correto, basta torná-lo um alias e anexá-lo a~/.bash_aliases
:E você deve estar pronto. Simplesmente digitar
ssh-add
agora chamará o alias que chamará o comando real com todo o redirecionamento no lugar.O
ssh-add
agora pede a senha corretamente 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
meio redireciona o descritor de arquivo nº 2 (erro padrão) para o mesmo local do descritor de arquivo nº 1 (saída padrão).O
> /dev/null
meio para redirecionar a saída padrão para/dev/null
, que é um arquivo especial que descarta todos os dados gravados nele.O
< /dev/null
meio redireciona a entrada padrão para/dev/null
(idem).Como uma observação lateral e um tópico fora do contexto, mas relacionada, se você quiser programar um serviço no bash, lembre-se do que realmente é um serviço, um processo com entrada, saída e erro padrão fechados que estão em segundo plano:
Observe que a única diferença é o & adicionado no final (mais o fato de eu ter alterado o comando
ssh-add
por uma teoriaservice
. Esses comandos colocarão corretamente um serviço em segundo plano.fonte
ssh
funciona exatamente da mesma maneira, e a mesma resposta que eu dei anteriormente ainda se aplica. Basta substituir todas as ocorrências dessh-add
comssh
e você está definido.ssh-add
mim - eu nem precisei redirecionar o stdout / stderr para obter o comportamento desejado, que era abrir ossh-askpass
programa. (Ou seja,ssh-add < /dev/null
foi o suficiente.)Eu tive o mesmo problema quando instalei o cavalo marinho (que fornece
seahorse-ssh-askpass
) sem instalar o pacotegnome-keyring
no ArchLinux.Observar o conteúdo deste pacote
gnome-keyring
( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) pode ajudá-lo a resolver seu problema.De qualquer forma, se você não se importa em usar cavalos-marinhos, também pode instalar os pacotes
seahorse
egnome-keyring
(ou os equivalentes para sua distribuição). Se você não usar o Gnome, poderão ser necessárias etapas adicionais: https://wiki.archlinux.org/index.php/GNOME_Keyring .fonte