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
ssha usar o programa$SSH_ASKPASS, não é possível permitir quesshveja o% realtty. É apenas condição. Isso pode ser feito usandosetside usando-nalternando 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
-Nswitch, 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/nullse você não estiver interessado nele. -
Configure
ControlMasteremssh_config. É um recurso interessante e assim que a conexão é estabelecida, você pode "ativar" as sessões rapidamente. Este snippet em~/.ssh/configdeve fazer isso:ControlPath ~/.ssh/controlmasters/%r@%h:%p ControlMaster auto ControlPersist 5mVocê pode adicionar isso em algum bloco
hostlistando 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 "$@"
}
-
-finstrui o SSH a ir para o segundo plano antes da execução do programa, após a senha. -
-winformasetsidpara 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.