Como posso alcançar o resultado de muitos dos
scp ~/here/is/one me@remote:~/where/it/goes
scp ~/yet/another me@remote:~/the/second/place
scp ~/the/number/three/one me@remote:~/foo/bar/qux
digitando a senha desse usuário remoto apenas uma vez?
Como posso alcançar o resultado de muitos dos
scp ~/here/is/one me@remote:~/where/it/goes
scp ~/yet/another me@remote:~/the/second/place
scp ~/the/number/three/one me@remote:~/foo/bar/qux
digitando a senha desse usuário remoto apenas uma vez?
Com o OpenSSH, você pode usar seu "modo mestre", no qual primeiro executa um
ssh
que apenas estabelecerá a conexão e autenticará antes de se colocar em segundo plano até fechá-lo explicitamente.Por exemplo:
-f
colocassh
em segundo plano após a autenticação bem-sucedida-M
ativa o modo mestre-N
não solicite nenhum comando remoto para ossh
processo de fundo-S
caminho para um nome para o soquete UNIX que será criado no sistema de arquivos; isso pode ser usado posteriormente à vontade por comandos adicionaisssh
, bem comoscp
ousftp
-o ControlPersist=yes
fazer ossh
processo em segundo plano persistir até que seja explicitamente fechadoEntão, para cada
scp
comando, apenas especifique-o ControlPath=<path-to-UNIX-socket-on-file>
a opção.Finalmente, feche o
ssh
processo em segundo plano.Uma visão geral de como o OpenSSH "modo mestre" funciona sob o capô:
O protocolo SSH permite nativamente que vários chamados "canais" compartilhem uma única conexão SSH . Cada um desses canais representa um serviço entre os suportados pelo SSH, por exemplo, uma sessão de terminal, um comando remoto, um encaminhamento de porta e assim por diante. Esta é essencialmente a base sobre a qual é possível solicitar, por exemplo, encaminhamento de porta junto com a sessão de terminal típica.
O
ssh
comando do cliente OpenSSH oferece cortesmente esse recurso de compartilhamento de conexão para aplicativos externos também, por meio de seu "modo mestre" . Um modo mestressh
cria temporariamente um soquete UNIX no arquivo conforme nomeado pela-S
linha de comando ouControlPath
opções de configuração. Este soquete UNIX no arquivo é temporário simplesmente porque seussh -M
processo o excluirá ao sair.Esse soquete UNIX pode então ser contatado por aplicativos arbitrários (obviamente apenas locais) capazes de falar o "protocolo de multiplexação" OpenSSH dedicado, que é bastante simplificado, de modo que é realmente muito fácil escrever programas (em idiomas com recursos de soquete UNIX). que se conectam a esse socket-on-file e solicitam dinamicamente operações como novas sessões tty, encaminhamentos de porta, etc. para seu
ssh -M
processo já em execução.É claro que
ssh
,scp
, esftp
eles mesmos são capazes de falar esse protocolo de multiplexação, você só precisa direcioná-los para isso usando as opções dedicadas que indiquei no exemplo acima.Entre as operações (sessões de terminal, encaminhamento de porta, etc.) que podem ser solicitadas a um Modo Mestre
ssh
por meio desse protocolo de multiplexação, existe naturalmenteexit
também a operação que instrui o Modo Mestressh
a interromper sua conexão e sair. O comando finalssh -O exit
no meu exemplo não faz nada mais do que emitir precisamente essa operação para o modo mestre,ssh
ouvindo aquele socket-on-file específico do UNIX.Com o pacote SSH, se você quiser evitar digitar a senha várias vezes, use as chaves ssh.
Eles são gerados por
ssh-keygen
, podem ser enviados para o outro host comssh-copy-id
(somente a chave pública é enviada).Se a chave não estiver criptografada, nenhuma senha será solicitada.
Se você não confia no status privado do seu arquivo (ataque…), você pode ter a chave criptografada
ssh-keygen -p
.Com chaves cifradas, a senha é solicitada, mas você pode iniciar
eval $(ssh-agent)
. Este agente pode armazenar na memória a chave quando você digitassh-add
. Em seguida, a senha é solicitada apenas uma vezssh-add
e a chave está disponível para ssh/scp.Quando você não precisar mais do agente,
ssh-agent -k
.