起因是我的~/.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参数表示指定登录端口。