Supondo que você executou este comando: ssh -f [email protected] -L 3306:mysql-server.com:3306 -N
conforme descrito na postagem que você vinculou.
Uma análise do comando:
ssh
: isso é bastante autoexplicativo. Invoca ssh
.
-f
: (Da man ssh
página)
Solicita que ssh vá para segundo plano antes da execução do comando. Isso é útil se o ssh vai pedir senhas ou frases-senha, mas o usuário quer em segundo plano.
Essencialmente, envie ssh
para segundo plano depois de inserir qualquer senha para estabelecer a conexão; ele retorna o prompt do shell para você em em localhost
vez de fazer o login no remote-host
.
[email protected]
: o servidor remoto no qual deseja fazer login.
-L 3306:mysql-server.com:3306
: Esta é a parte interessante. -L
(da man ssh
página):
[bind_address:] port: host: hostport Especifica que a porta fornecida no host local (cliente) deve ser encaminhada para o host e a porta fornecidos no lado remoto.
Assim, -L 3306:mysql-server.com:3306
liga a porta local3306
à porta remota 3306
no host mysql-server.com
.
Quando você se conecta à porta local3306
, a conexão é encaminhada pelo canal seguro para mysql-server.com
. O host remoto , mysql-server.com
em seguida, conecta-se mysql-server.com
na porta 3306
.
-N
: não execute um comando. Isso é útil para "apenas encaminhar portas" (citando a página do manual).
Este comando afeta alguma coisa no servidor?
Sim, ele estabelece uma conexão entre localhost e mysql-server.com na porta 3306 .
E como faço para fechar este túnel ...
Se você já usou -f
, notará que o ssh
processo que você abriu fica em segundo plano. O método mais agradável de fechá-lo é executar ps aux | grep 3306
, encontrar o pid
de ssh -f ... -L 3306:mysql-server.com:3306 -N
, e kill <pid>
. (Ou talvez kill -9 <pid>
; esqueci se apenas kill
funciona). Isso tem o belo benefício de não matar todas as suas outras ssh
conexões; se você tem mais de um, restabelecê-los pode ser uma pequena ... dor.
... porque agora não consigo usar meu mysql local corretamente.
Isso ocorre porque você efetivamente "capturou" o processo local mysql
e encaminhou para o processo remoto qualquer tráfego que tentasse se conectar a ele mysql
. Uma solução muito mais agradável seria não usar a porta local 3306 no encaminhamento de porta. Use algo que não seja usado, como 33060. (Números mais altos geralmente são menos usados; é muito comum encaminhar uma combinação como esta: "2525-> 25", "8080-> 80", "33060-> 3306" ou semelhante. Torna a lembrança um pouco mais fácil).
Então, se você usou ssh -f [email protected] -L 33060:mysql-server.com:3306 -N
, você apontaria sua função Zend connect-to-mysql para uma localhost
porta 33060
, que se conectaria a uma mysql-server.com
porta 3306
. Obviamente , você ainda pode se conectar a uma localhost
porta 3306
, portanto, ainda pode usar o mysql
servidor local .
-9
não é necessáriokill
, considerando que o processo ainda está funcionando bem ;-)Isso irá matar todas as sessões ssh que você abriu no terminal.
fonte
killall ssh
é um comando bastante imprudente. Aconselho pesquisar sua lista de processos (ou seja,ps aux | grep ssh
como sugerido por @simont acima) para descobrir a id de processo específica do seu processo de túnel ssh. Então você pode matar o pid especificamente.Nota: adicionar como resposta, pois os comentários não suportam blocos de código.
Na minha opinião, é melhor NÃO usar
-f
e, em vez disso, apenas colocar em segundo plano o processo normalmente&
. Isso lhe dará o pid exato que você precisa matar:Ou melhor ainda, apenas crie isso como um script de wrapper:
backend-tunnel mysql-workbench
backend-tunnel bash
fonte
-f
permite que assh
sessão continue mesmo quando a sessão do terminal é fechada, ao contrário de empurrar para segundo plano. Compreender opid
usops aux | grep ssh | grep <LOCAL-PORT>
é bastante trivial.-f
também tem a vantagem de solicitar ao usuário local a senha de login, se necessário. Se você usar&
, esse prompt não será visto pelo usuário, a menos que ele traga o processo para o primeiro plano (por exemplo, usandofg
).