Reutilização da conexão
O SSHv2 permite que a mesma conexão autenticada estabeleça vários 'canais' - shell interativo, comando em lote, SFTP, juntamente com os secundários, como encaminhamento de agente ou encaminhamento de TCP. Seu servidor provavelmente suporta multiplexação de conexão por padrão. (Se seus administradores reclamarem, ele não está armazenando sua senha em cache em nenhum lugar - está armazenando toda a conexão em cache.)
Com o OpenSSH você tem ControlMaster
e ControlPath
opções (-M e -S) para fazer uso disso:
-
Inicie uma conexão SSH 'principal' usando
-M
. (Já que você ainda não tem um ControlPath na sua configuração, você precisa especificá-lo na linha de comando usando-S
. Ele precisa ser longo, então eu adiciono as opções-fN
para o fundo; elas são tecnicamente opcional de outra forma.)$ ssh [email protected] -fNMS ~/.ssh/bar.socket [email protected]'s password:
Você está de volta ao shell local.
-
Inicie uma nova conexão pelo mestre:
$ ssh [email protected] -S ~/.ssh/bar.socket
Você está dentro.
-
Para que isso seja útil para o Git / rsync / SFTP, você precisa configurar
ControlPath
em sua configuração, porque você não poderá especificar-S
o tempo todo:Host * ControlPath ~/.ssh/S.%r@%h:%p
Você pode automatizar isso - versões recentes do OpenSSH também possuem ControlPersist
, que estabelece automaticamente uma conexão mestre em background, se ainda não houver uma. Isso permite que você pule a etapa 1 e use apenas ssh como faria normalmente.
-
Configuração em
~/.ssh/config
:Host * ControlPath ~/.ssh/S.%r@%h:%p ControlMaster auto ControlPersist 15m
-
Primeira conexão pede senha:
$ ssh [email protected] [email protected]'s password: [foo@bar:~]$ exit
-
O segundo não:
$ ssh [email protected] [foo@bar:~]$ yay
Para controlar o mestre multiplex (pare ou configure os reencaminhamentos TCP), use a opção -O
.
Um método semelhante é suportado pelas versões recentes do PuTTY .