Eu tenho um alias que lança um ssh
comando personalizado com encaminhamento de porta que se parece com isso:
ssh -Y -L 8888:localhost:8888 hostname
É claro que isso funciona bem para a primeira sessão que inicio para o mesmo host, mas nas vezes subsequentes o encaminhamento falhará, pois a porta 8888 já estará em uso.
O que eu quero fazer é encontrar uma maneira de cada vez que eu iniciar uma ssh
conexão com o mesmo servidor, a porta se ajuste automaticamente para que cada ssh
conexão diferente tenha sua própria porta separada para encaminhar.
Então, por exemplo, na primeira vez que eu emitir o comando, será equivalente a
ssh -Y -L 8888:localhost:8888 hostname
na segunda vez será equivalente a
ssh -Y -L 8889:localhost:8889 hostname
e assim por diante.
Eu sei que posso fazer isso usando Python ou qualquer outra coisa, mas eu queria saber se há uma solução mais fácil do que escrever meu próprio script (possivelmente meio complicado) para fazer isso. Isso é possível?
PS.: Eu sei que posso fazer isso manualmente com certa facilidade, mas executo várias delas por dia, e isso exigiria não apenas digitar muito mais coisas, mas também acompanhar quais portas já estão em uso e quais não são.
Aqui está um pequeno script que faz a coisa que você descreveu. Ele funciona tentando bloquear um arquivo com o nome do número da porta e, se isso falhar, incrementando o número da porta e tentando novamente.
Os arquivos de bloqueio de porta são criados em
$HOME/.ssh/ports
. Eles não são limpos depois de criados, mas tudo bem; não estamos verificando a presença; estamos adquirindo um bloqueio de arquivo.Esses scripts não se importam se você está se conectando sempre ao mesmo servidor ou a um servidor diferente; cada conexão terá uma porta exclusiva.
Se eu salvar este script em um arquivo chamado
portfw.sh
e executá-lo três vezes, assim:Verei os seguintes processos na saída de
ps
: