35 mysql ssh port-forwarding socket socat
快速提问 - 我运行两个 linux 机器,一个是我自己的桌面,另一个是我的 VPS。出于 VPS 端的安全原因,我选择了与 MySQL ( /var/run/mysqld/mysql.sock) 的套接字连接。我知道我可以像这样ssh -L 3307:127.0.0.1:3306 user@site.com建立隧道:如果我设置远程 sql server 来监听某个端口,但我想知道的是我可以做这样的事情:ssh -L /path/to/myremotesqlserver.sock:/var/run/mysqld/mysql.sock从而隧道两个套接字,而不是两个端口?
一个完全可以接受的解决方案也是将本地端口转发到远程套接字文件,但在可能的情况下,我试图不在远程机器上运行 tcp 服务器。
(是的,我知道 tcp 会更容易)。
小智 45
虽然在当时问这个问题的时候,确实是不可能的,但是现在可以了。
您可以同时进行:UNIX=>TCP 和 UNIX=>UNIX 转发。
例如:
ssh \
-R/var/run/mysql.sock:/var/run/mysql.sock \
-R127.0.0.1:3306:/var/run/mysql.sock \
somehost
Run Code Online (Sandbox Code Playgroud)
从 OpenSSH 6.7 开始就可以了。
ijk*_*ijk 38
socat两端安装export SOCKET_DIR=~/.remote-sockets
mkdir -p $SOCKET_DIR
socat "UNIX-LISTEN:$SOCKET_DIR/mysqld.sock,reuseaddr,fork" \
EXEC:'ssh user@server socat STDIO UNIX-CONNECT\:/var/run/mysqld/mysqld.sock'
Run Code Online (Sandbox Code Playgroud)
然后
mysql -S $SOCKET_DIR/mysqld.sock -u mysqluser -p
Run Code Online (Sandbox Code Playgroud)
从使用 ssh 和 socat 转发 unix 域套接字中被盗
Jav*_*ier 11
我还没有这样做,但我会尝试使用socat。也许是这样的:
ssh xxx@yyy.zzz -L 9999:localhost:9999 "socat TCP-LISTEN:localhost:9999 UNIX-CONNECT:/var/run/mysqld/mysql.sock"
socat UNIX-LISTEN:/path/to/local/socket TCP:localhost:9999
Run Code Online (Sandbox Code Playgroud)
再说一次,我从来没有做过这样的事情。
自 ssh 6.7 起不再需要 socat。您可以直接转发 unix 域套接字,例如:
ssh -nNT -L $(pwd)/docker.sock:/var/run/docker.sock user@someremote
Run Code Online (Sandbox Code Playgroud)
更多信息:https : //medium.com/@dperny/forwarding-the-docker-socket-over-ssh-e6567cfab160