SSH端口转发三种方式看这个就够了
最近公司项目上线,由于需要先跑一遍脚本去处理线上的旧数据,但是线上的库只有在线上服务器才可以连接,本地是直接连不通的,所以想到了使用ssh端口转发来通过线上的服务器当做跳板机远程连接到线上的数据库。同理在外网想连接内网的机器也是行得通的ssh端口转发sshd_config里要打开AllowTcpForwarding选项,否则-R远程端口转发会失败。默认转发到远程主机上的端口绑定的是127.0.0.
·
最近公司项目上线,由于需要先跑一遍脚本去处理线上的旧数据,但是线上的库只有在线上服务器才可以连接,本地是直接连不通的,所以想到了使用ssh端口转发来通过线上的服务器当做跳板机远程连接到线上的数据库。同理在外网想连接内网的机器也是行得通的
ssh端口转发
- sshd_config里要打开
AllowTcpForwarding
选项,否则-R
远程端口转发会失败。 - 默认转发到远程主机上的端口绑定的是
127.0.0.1
,如要绑定0.0.0.0
需要打开sshd_config里的GatewayPorts
选项。这个选项如果由于权限没法打开也有办法,可配合ssh -L
将端口绑定到0.0.0.0
,聪明的你应该能想到办法
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 本地端口转发
-D 动态端口转发
本地转发
ssh -NL [端口]:[目标IP]:[目标端口] [跳板机用户名]@[跳板机IP]
ssh -NL 13306:aliyuncs.com:3306 root@39.23.80.6
# 访问 127.0.0.1:13306 -> aliyuncs.com:3306
本地转发是将
目标ip:目标端口
映射到127.0.0.1:端口
即: 访问127.0.0.1:端口
等于访问目标ip:目标端口
远端转发
ssh -NR [端口]:[目标IP]:[目标端口] [跳板机用户名]@[跳板机IP]
ssh -NR 8080:47.104.164.235:80 root@8.136.136.247
# 访问8.136.136.247:8080 -> 47.104.164.235:80
ssh -NR 8000:8.136.136.247:80 root@47.104.164.235
# 访问47.104.164.235:8000 -> 8.136.136.247:80
远端转发是将
目标ip:目标端口
映射到跳板机的ip:端口
即: 访问跳板机的ip:端口
等于访问目标ip:目标端口
动态转发(相当于代理服务器)
ssh -ND [本地socke代理端口] [跳板机用户名]@[跳板机IP]
ssh -ND 2000 root@47.104.164.235
# 在浏览器或系统设置中将socke代理改成本地 127.0.0.1:2000
# 然后本地所有的上网出口全部通过47.104.164.235进行转发。百度ip会发现本机ip是47.104.164.235
动态端口转发则只是绑定了一个本地端口,而目标地址:目标端口则是不固定的
目标地址:目标端口是由本地发起的请求决定的
比如访问baidu.com 则相当于把这个请求首先发送到了47.104.164.235,然后由47.104.164.235进行访问后将数据转发回至本地
即: 访问百度流程变成 本地 -> 47.104.164.235 -> 百度
更多推荐
已为社区贡献1条内容
所有评论(0)