每天一个Bug —— SSH端口转发连接内网数据库
最近装了个xubuntu的第二系统用来开发,高效的同时也带来了一些问题。那就是我原本用来连接内网数据库的XShell用不了了。一位古人说过,如果Windows可以完成的骚操作你用Ubuntu做不到,那么就是你还不够骚。骚操作共分两步:一、通过SSH端口转发将本地一个不用的端口映射到内网机器上ssh命令推荐还是看help文档,比看许多教程有效多了...简单介绍一下ssh常见用法:...
最近装了个xubuntu的第二系统用来开发,高效的同时也带来了一些问题。那就是我原本用来连接内网数据库的XShell用不了了。一位古人说过,如果Windows可以完成的骚操作你用Ubuntu做不到,那么就是你还不够骚。
骚操作共分两步:
一、通过SSH端口转发将本地一个不用的端口映射到内网机器上
ssh命令推荐还是看help文档,比看许多教程有效多了...
简单介绍一下ssh常见用法:
1、本地账户和远程账户相同时:ssh [IP地址]
ssh 172.18.18.18
这种做法本质只是省略输入远程用户名,默认使用本地账户名填充
2、通过IP和账户建立远程连接:ssh [远程账户名]@[IP地址]
ssh 172.18.18.18
这是一个最常见的操作,用完整的远程账户名+IP建立连接
3、建立连接的同时加入端口转发:ssh -L [本地端口]:[远程A机器IP]:[远程A机器端口] [远程B机器账户名]@[远程B机器IP]
ssh -L 13306:172.18.18.19:3306 root@172.18.18.18
这也就是我用到的骚操作了,这里我们的机器可以连接B,但无法连接A时,可以通过连接到B,并把本地端口映射到A上,从而访问到A机器,这里映射接通后的骚操作就自行开发了。可以接到22再通过ssh连接C,或是80访问网页...
4、端口转发的反向操作:ssh -R [本地端口]:[远程A机器IP]:[远程A机器端口] [远程B机器账户名]@[远程B机器IP]
ssh -R 3306:172.18.18.18:3306 root@172.18.18.18
这里的操作就相当于我将端口暴露给指定机器的指定端口,一般用在内网的机器上。如此就可以通过接口机的指定端口通过其他机器访问这台机器了。
5、不执行远程指令 ssh -N ...
只要在ssh中加入-N,就相当于后台建立连接,不向远程机器发送指令,一般用于建立端口转发和代理时
二、通过本地映射出去的端口连接MySQL
mysql -u root -p
默认连接localhost的3306端口。于是我只需要再指定端口就可以啦
mysql -P 13306 -u root -p
第一遍就成功,不免得意洋洋,当我仔细一看,这样连接到的并非是远程数据库,而是我本地的数据库。
这是因为虽然能指定端口,但对localhost的连接会默认先访问3306端口,所以我的指定端口被忽略掉了(mysql各种坑啊Orz)。于是我关闭掉本地数据库,本来以为马上迎来曙光,迎接我的却是:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)。
通过各方查证,确定我的ssh确实建立了连接,而且端口转发正常。最后发现问题出在我未指定host,而且指定host不能为localhost,而是要指定host为127.0.0.1。
mysql -h 127.0.0.1 -P 13306 -u root -p
数据库连上了...
人前一时骚,人后搞断腰。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)