Isso será um pouco mais complicado, mas a combinação de várias peças fará com que funcione:
Explicação
-
Para forçar o
ssh
a usar o programa$SSH_ASKPASS
, não é possível permitir quessh
veja o% realtty
. É apenas condição. Isso pode ser feito usandosetsid
e usando-n
alternando parassh
.Este caso iniciaria a conexão, mas você não seria capaz de interagir com o shell, que provavelmente também é sua exigência;) (e também interrompe seu TTY local).
Mas você pode desistir da "primeira sessão". Você também deve adicionar
-N
switch, que suprimirá o comando remoto e fará apenas a autenticação .Além disso, o possível "lixo" de saída pode ser redirecionado para
&> /dev/null
se você não estiver interessado nele. -
Configure
ControlMaster
emssh_config
. É um recurso interessante e assim que a conexão é estabelecida, você pode "ativar" as sessões rapidamente. Este snippet em~/.ssh/config
deve fazer isso:ControlPath ~/.ssh/controlmasters/%r@%h:%p ControlMaster auto ControlPersist 5m
Você pode adicionar isso em algum bloco
host
listando seus "candidatos lentos" ou apenas em qualquer lugar. Não é quase nenhuma sobrecarga.
Linha final
Em seguida, você poderá se conectar dessa maneira ao host que espera que demore:
setsid ssh -nN host
# wait, insert password in the X11 prompt
ssh host
# will bring you directly to your session
Todo o processo pode ser simplificado pela função alias
ou bash fazendo as duas etapas, mas é deixada na imaginação dos leitores.
Apenas argumentos da linha de comando
Você pode unir as duas coisas na linha de comando sem ssh_config
part:
setsid ssh -nNMS ~/.ssh/masters/%C host
# wait, insert password in the X11 prompt
ssh -S ~/.ssh/masters/%C host
# will bring you directly to your session
A seguinte função deve funcionar quando as opções de SSH não são especificadas:
ssh() {
if ! command ssh -o PasswordAuthentication=no "$1" true
then
setsid -w ssh -fnN "$1"
fi
command ssh "$@"
}
-
-f
instrui o SSH a ir para o segundo plano antes da execução do programa, após a senha. -
-w
informasetsid
para aguardar o final do programa. Nesse caso, isso acontece quando o SSH vai para o segundo plano. Combinado comssh -f
, a espera manual entre os dois comandos SSH pode ser eliminada. - A função assume que o primeiro argumento é o nome do host.
- O teste é apenas para evitar conexões SSH desnecessárias.