每天又省好几秒:一键建立到HiveSQL的转发服务
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)
经过这样一番折腾,每天又省下来好几秒,感觉生命又延长了好多,真是爽歪歪呀。还有就是,这种畅通无阻的感觉实在是令人着迷呀!
Leave 每天又省好几秒:一键建立到HiveSQL的转发服务 to:
Read more #cn posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.