起因是我的~/.ssh/config里有这样几行:
Host D1
HostName 35.161.xx.xxx
Port 222
User na.xxxx
IdentityFile ~/.ssh/id_rsa
LocalForward 15439 redshift-db.xxxx.amazonaws.com:15439
其中35.161.xx.xxx是某台服务器(就叫S1吧)。
S1是个踏み台,本地机器会通过S1来连接到D1(redshift的数据库)。
然后,打开终端输入ssh D1之后,我就可以在tableau连接数据时,输入localhost来连接到D1.
想知道原理是啥,于是查了查。
https://qiita.com/t_uda/items/3d0547fa716f97449c64
根据这篇文章,
ssh -L aaaa:proxy.domain:bbbb myname@where.is.myhost
就相当于~/.ssh/config里的
Host myhost
HostName where.is.myhost
User myname
LocalForward aaaa proxy.kuins.net:bbbb
这样的话,我的文件里就相当于
ssh -L 15439:redshift-db.xxxx.amazonaws.com:15439 na.xxxx@35.161.xx.xxx
然后我去查了ssh -L是什么。
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html
“本地端口转发”(Local forwarding)。
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
我们在host1执行下面的命令:
ssh -L 2121:host2:21 host3
命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
ftp localhost:2121
“本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道”。
下面是一个比较有趣的例子。
ssh -L 5900:localhost:5900 host3
它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
另一个例子是通过host3的端口转发,ssh登录host2。
ssh -L 9001:host2:22 host3
这时,只要ssh登录本机的9001端口,就相当于登录host2了。
ssh -p 9001 localhost
上面的-p参数表示指定登录端口。
本文解析了SSH的本地端口转发(Local Forwarding)原理,即如何通过一台中间服务器(踏み台)建立本地机器与远程数据库之间的连接。通过配置~/.ssh/config文件中的LocalForward指令,实现从本地特定端口到远程服务器指定端口的数据转发,进而实现在Tableau等工具中通过localhost连接远程数据库。
2834

被折叠的 条评论
为什么被折叠?



