ssh: túnel automaticamente quando necessário

1

Eu preciso de ssh para várias máquinas, tanto do trabalho quanto de casa. Quando no trabalho, posso usar minhas definições de host ~/.ssh/config facilmente, e basta fazer:

ssh servername_shortcut

Quando estou em casa, preciso fazer um túnel por meio de um servidor gateway, que é um multi-step & processo tedioso

ssh -N -f -C -L 2024:servername:22 [email protected]
ssh -p 2024 username@localhost

(isso é particularmente irritante porque eu tenho que matar manualmente o túnel quando eu desconectar)

Da mesma forma, muitas vezes preciso rsync coisas, o que requer:

rsync -e 'ssh -p 2024' username@localhost:... 

em vez de

rsync username@servername_shortcut

Como alterno frequentemente entre essas situações, gostaria de poder usar a versão resumida o tempo todo. Existe algum mecanismo para alcançar isso?

EDIT: Especificamente, usando ~/.ssh/config , existe uma maneira de especificar um nome de host que usará host.domain.org quando permitido e localhost:$portnumber quando um túnel estiver aberto? No pseudocódigo, estou perguntando por isso:

host myhost
user aginsbur
if tunnel:
    HostName localhost
    port 2022
else:
    HostName myhost.domain.org
    
por keflavich 15.01.2016 / 09:42

1 resposta

0

Eu sei que o @Jonno já colocou isso nos comentários, mas é uma ótima sugestão, e é exatamente o que eu faria, então pensei em colocá-lo aqui: basta colocar os comandos nos scripts do bash. Por exemplo:

echo 'ssh -N -f -C -L 2024:servername:22 [email protected]' > ssh_gateway_hostname.sh

Isso colocará o comando em um arquivo .sh e, em seguida, você poderá executá-lo de diversas maneiras:

bash ssh_gateway_hostname.sh

ou

source ssh_gateway_hostname.sh

Embora exista uma ligeira diferença entre os dois, não é provável que isso o afete, a menos que você esteja fazendo coisas extravagantes com seus ambientes.

A coisa interessante sobre rsync é que, após o seu rsync inicial de um arquivo ou diretório, usos sucessivos dele apenas atualizam as mudanças. Isso significa que você pode simplesmente especificar um diretório que deseja sincronizar e colocar isso no script .sh :

echo 'rsync -e 'ssh -p 2024' username@localhost:...' > rsync_username_at_localhost.sh

Então, quando você executá-lo, ele só moverá as coisas novas!

    
por 15.01.2016 / 10:32

Tags