网站首页 > 技术文章 正文
SSH: Port Forwarding
1.正向隧道-隧道监听本地port,为普通活动提供安全连接
ssh -qTfnN -L port:host:hostport -l user remote_ip
2.反向隧道----隧道监听远程port,突破防火墙提供服务
ssh -qTfnN -R port:host:hostport -l user remote_ip
3.socks代理
SSH -qTfnN -D port remotehost(用证书验证就直接主机名,没用的还要加上用户名密码)
-q Quiet mode. 安静模式,忽略一切对话和错误提示。
-T Disable pseudo-tty allocation. 不占用 shell 了。
-f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数。
-n Redirects stdin from /dev/null (actually, prevents reading from stdin). -f 推荐的,不加这条参数应该也行。
-N Do not execute a remote command. 不执行远程命令,专为端口转发度身打造。
ssh实现转发, 只要用到以下两条命令:
# ssh -CfNg -L 6300:127.0.0.1:1521 oracle@172.16.1.164
# ssh -CfNg -R 1521:127.0.0.1:6300 oracle@172.16.1.164
不论是做跳板, 还是加密隧道, 还是加密其他的网络连接也都是这两条命令. 视具体情况而定, 有时只要用到其中一条, 有时两条都要用到.
1) -CfNg
C表示压缩数据传输
f表示后台用户验证,这个选项很有用,没有shell的不可登陆账号也能使用.
N表示不执行脚本或命令
g表示允许远程主机连接转发端口
2) -L 本地转发
# ssh -CfNg -L 6300:127.0.0.1:1521 oracle@172.16.1.164
本机(运行这条命令的主机)打开6300端口, 通过加密隧道映射到远程主机172.16.1.164的1521端口(使用远程主机oracle用户). 在本机上用netstat -an|grep 6300可看到. 简单说,本机的6300端口就是远程主机172.16.1.164的1521端口.
3) -R 远程转发
# ssh -CfNg -R 1521:127.0.0.1:6300 oracle@172.16.1.164
作用同上, 只是在远程主机172.16.1.164上打开1521端口, 来映射本机的6300端口.
4) 实用例子
AB 互联
BC 互联
有A,B,C 3台服务器, A,C有公网IP, B是某IDC的服务器无公网IP. A通过B连接C的80端口(A<=>B<=>C), 那么在B上执行如下命令即可:
$ ssh -CfNg -L 6300:127.0.0.1:80 userc@C
$ ssh -CfNg -R 80:127.0.0.1:6300 usera@A
服务器A和服务器C之间, 利用跳板服务器B建立了加密隧道. 在A上连接127.0.0.1:80, 就等同C上的80端口. 需要注意的是, 服务器B上的6300端口的数据没有加密, 可被监听, 例:
# tcpdump -s 0-i lo port 6300
实例说明:
一台服务器提供ftp服务,因为ftp传输是明文密码,如果不做ssh端口之前,我们可以通过tcpdump命令很容易的捕捉到明文信息。所以我们要对21端口进行转发:
ftp-server# ssh -CNfg -R 2121:localhost:21 root@100.0.0.50
然后登录到100.0.0.50机器,我们可以通过netstat -an|grep :2121查看端口已经侦听
100.0.0.50# ftp localhost 2121
就可以登录到ftp-server了,而且tcpdump无法捕获到有效的信息。
2121端口任意选择,只要是机器上没有占用的端口就行
来一个稍微复杂一点的,做网关的例子:
FTP A 2121 B 8888
C 21 B
假如内网有一台提供ftp(linux,port is2121,称为A机器)的机器,通过网关服务器(linux,port is8888,称为B机器)进去,现在外网有一台C机器需要访问网关服务器的某个端口(port is21)来访问内网的ftp服务器。大家可以看到,其实这就像是一个基于ssh的防火墙程序,好,下面我们来具体操作:
1、login A 机器
# ssh -CNfg -R 8888:localhost:2121 root@B机器IP
这样我们就在B机器上开了一个8888->2121的端口转换,但是由于8888端口只能侦听在localhost主机上,因此,虽然我们已经可以在B机器上使用
# ftp localhost 8888
在C 来访问真正的ftp服务器,但仍然无法提供给外网的机器访问
2、login B机器
# ssh -CNfg -L 21:localhost:8888 root@localhost
这样做,是做本地机器上的21->8888端口转换,可以侦听在任何地址上的请求。
2(1)。
如果C机器也是一台linux机器,那也可以这样设置:
# ssh -CNfg -R 21:localhost:8888 root@C机器IP
3。使用C机器,
可以是linux下的ftp命令,也可以是windows下的客户端软件都可以访问B机器的21端口来连接后台真正的ftp服务器(真正的端口是2121)
如果是按照2(1)中的设置,则访问的地址为本机IP。
猜你喜欢
- 2024-09-18 Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移
- 2024-09-18 如何用Python抓抖音上的小姐姐(如何用python抓抖音上的小姐姐呢)
- 2024-09-18 建立深度学习服务器最简单的方法!快来get新技能吧
- 2024-09-18 Go 每日一库之 jobrunner(github每日一题)
- 2024-09-18 一个非常不错的项目,没有启动步骤文档「伪开源」
- 2024-09-18 渐进式Web应用(PWA)入门教程(上)(渐进式web app)
- 2024-09-18 教程|手把手教你在本地构建Nervos AppChain全家桶
- 2024-09-18 数据持久化技术——MP(数据持久化层的主要作用)
- 2024-09-18 前端容易理解错的跨域原理(跨域是前端解决还是后端解决的)
- 2024-09-18 代理,生活中随处可见,Go中如何进行 HTTPS 代理呢?
- 1513℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 558℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 505℃MySQL service启动脚本浅析(r12笔记第59天)
- 484℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 482℃启用MySQL查询缓存(mysql8.0查询缓存)
- 462℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 442℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 439℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)