Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conecte-se a um servidor MySQL por SSH em PHP

Solução de túnel SSH


Configure um túnel SSH para seu servidor de banco de dados MySQL (por meio de um proxy Jumpbox para segurança).

(A) Ferramentas GUI


Dependendo de seus requisitos, você pode usar um cliente MySQL GUI com suporte a encapsulamento SSH integrado, como Visual Studio Code Encaminhando uma porta / criando um túnel SSH , TablePlus ou use PuTTY para configurar local encaminhamento de porta.

No macOS, eu gosto de Secure Pipes ou TablePlus .

(B) Linha de Comando


Etapa 1.
ssh -fNg -L 3307:10.3.1.55:3306 [email protected] 

A chave aqui é o '-L' switch que informa ao ssh que estamos solicitando local encaminhamento de porta.

Optei por usar a porta 3307 acima de. Todo o tráfego no meu local máquina direcionada para esta porta agora será 'port-forwarded' através do meu cliente ssh para o servidor ssh rodando no host no endereço ssh-jumpbox.com .

O servidor proxy ssh do Jumpbox descriptografará o tráfego e estabelecerá uma conexão de rede com seu servidor de banco de dados MySQL em seu nome, 10.3.1.55:3306 , nesse caso. O servidor de banco de dados MySQL vê a conexão vindo do endereço de rede interno do seu Jumpbox.



Sintaxe de encaminhamento de porta local
A sintaxe é um pouco complicada, mas pode ser vista como:
<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com

Se você estiver interessado nos outros switches, eles são:

-f (ir para segundo plano)
-N (não executar um comando remoto)
-g (permitir que hosts remotos se conectem a portas encaminhadas locais)

Autenticação de chave privada, adicione a opção (-i) acima:

-i /path/to/private-key

Etapa 2.

Diga ao seu cliente MySQL local para se conectar através do seu túnel SSH através da porta local 3307 em sua máquina (-h 127.0.0.1) que agora encaminha todo o tráfego enviado a ele através do túnel SSH que você estabeleceu na etapa 1.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase


A troca de dados entre cliente e servidor agora é enviada pela conexão SSH criptografada e é segura.


Nota de segurança
Não faça túnel diretamente para seu servidor de banco de dados. Ter um servidor de banco de dados acessível diretamente da Internet é um grande risco de segurança. Faça com que o endereço de destino do túnel seja o endereço de Internet do seu Jumpbox/Bastion Host (veja o exemplo na etapa 1) e seu destino de banco de dados o interno Endereço IP do seu servidor de banco de dados na rede remota. O SSH fará o resto.


Etapa 3.

Agora conecte seu aplicativo PHP com:
<?php
      $smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
      mysql_select_db( "db", $smysql ); 
?>

Crédito para Chris Snyder ótimo artigo detalhando o tunelamento de linha de comando ssh para conectividade MySQL.