HiveSQL是HIVE上最好玩的服务之一,通过HiveSQL我们可以查询、分析出各种有意思的数据,比如说之前文章中提到的KE。
(图源 :pixabay)
但是不幸的是,国内无法直接访问HiveSQL服务,我不清楚是HiveSQL封锁了中国大陆的IP,还是我们这边墙了HiveSQL的IP(嗯,我觉得后者的可能性比较大)。
话说这前折腾过各种方式,想在Python脚本中使用代理(Socks5)来绕过限制,访问到HiveSQL,结果发现pymssql抑或是pyodbc都不支持设置Socks5代理。
后来我又想到一个方法,何不用ssh转发把HiveSQL服务器地址转发到本机(Localhost)呢?
在回顾了SSH的三种转发类型之后:
- 动态转发:
-D [bind_address:]port
- 本地转发:
-L [bind_address:]port:host:hostport
- 远程转发:
-R [bind_address:]port:host:hostport
最终弄出个这样一组命令(本地转发)来打通隧道:
ssh -L 1433:sql_server_ip:1433 user@ssh_server_ip -N
嗯,用着还不错,而且我发现有了这个隧道之后,我根本不用在Python程序中用呀,我可以直接使用LINQPad等方便的SQL Server工具呀。
(图源 :pixabay)
不过用了一段时间时候,我发现一个严重的问题,就是我每次启用上述命令时,都要输入密码,而我给这个账户设置的又是一个超级复杂的密码,每次我都要去翻密码本,复制粘贴进去,好不麻烦!
于是乎,我就想如何才能绕过或者简化输入密码这个过程呢?
其实除了使用Windows自带的ssh
指令,我们还可以用Putty作者旗下的另一款软件plink
,这款软件支持在命令行指定用户名、密码(比如-l user -pw abc123
),但是现在的想法是能用系统自带的软件,尽量不用第三方。
另外一个方案就是修改用户对应的密码为简单密码,这样输入就省事多了,但是这样明显存在被暴力破解的风险,也不明智。
那么剩下的方案就是使用密钥而不是密码登录远程SSH账户,嗯,这个方案最靠谱了。让我们一步一步落到实处。
Windows下也可以使用ssh-keygen
生成公私钥对哦:
ssh-keygen -t rsa -b 4096 -C "oflyhigh@example.com"
成功生成并保持公私钥对
接下来我们在要用来做转发的服务器(VPS)上生成一个新用户(不需要密码):
sudo adduser --disabled-password hivesql
按提示完成操作(实际用户名自己随意取)
然后就是把之前我们生成的公私钥对的公钥,拷贝到对应用户的.ssh/authorized_keys
文件中。
实践证明需要先创建对应.ssh
目录(我还对相应用户、组进行的修改),然后用文本编辑器打开相应的公钥,复制后贴到相应文件中即可。
还有就是在/etc/ssh/sshd_config
中追加如下内容(根据实际用户名修改)
Match User hivesql
PasswordAuthentication no
ChallengeResponseAuthentication no
再重启服务器(vps)的SSH服务即可
sudo systemctl restart ssh
再在Windows下编辑如下脚本:
@color 17
@ssh -L 1433:vip.hivesql.io:1433 -i C:\xxx\xxx\.ssh\hivesql -l hivesql ssh_server_ip -p port -N
并将其保存为hivesql_forwarder.bat
类似的名字。
之后我们需要连接hivesql前,点击一下这个文件,就使用127.0.0.1:1433代替vip.hivesql.io:1433啦,非常方便。
(图源 :pixabay)
经过这样一番折腾,每天又省下来好几秒,感觉生命又延长了好多,真是爽歪歪呀。还有就是,这种畅通无阻的感觉实在是令人着迷呀!