使用ssh正向连接、反向连接、做socks代理的方法
文章出处:http://dzmailbox.blog.163.com/blog/static/120534385201232642637847/
最近才发现ssh有多么的强大!
在网上搜了半天,发现大多数人都是一瓶子不满的水平,浅尝辄止。就没有几个人有点儿科学研究的精神吗?为啥不把它搞明白呢?
当然,相信有不少人是很明白的,但是不愿意写博文来公开。其实这样大可不必,独乐乐不如众乐乐,何必那么小肚鸡肠?
1、用ssh做正向连接
啥叫正向连接?就是client连上server,然后把server能访问的机器地址和端口(当然也包括server自己)镜像到client的端口上。
命令:
ssh -L [客户端IP或省略]:[客户端端口]:[服务器侧能访问的IP]:[服务器侧能访问的IP的端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]
其中,客户端IP可以省略,省略的话就是127.0.0.1了,也就是说只能在客户端本地访问。服务器IP都可以用域名来代替。
举例说明:
你的IP是192.168.1.2,你可以ssh到某台服务器8.8.8.8,8.8.8.8可以访问8.8.4.4,你内网里还有一台机器可以访问你。
如果你想让内网里的另外一台电脑访问8.8.4.4的80端口的http服务,那么可以执行:
ssh -L 192.168.1.2:8080:8.8.4.4:80 test@8.8.8.8
也就是说,ssh到8.8.8.8上,然后让8.8.8.8把8.8.4.4的80端口映射到本地的8080端口上,而且和本地192.168.1.2这个IP绑定。
内网里的另外一台机器可以通过IE浏览器中输入http://192.168.1.2:8080查看8.8.4.4的网页。
当然,如果是其他服务,比如ftp、ssh、远程桌面也是可以的。不过,VPN貌似是不行的,可能是因为GRE协议无法通过。
2、用ssh做反向连接
啥叫反向连接?就是client连上server,然后把client能访问的机器地址和端口(也包括client自己)镜像到server的端口上。
反向连接用得可能更多一些。比如你的客户端在内网,在外网是无法直接访问到的,这时用反向连接打通一条隧道,就可以从外网通过这条隧道进来了。
命令:
ssh -R [服务器IP或省略]:[服务器端口]:[客户端侧能访问的IP]:[客户端侧能访问的IP的端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]
其中,服务器IP如果省略,则默认为127.0.0.1,只有服务器自身可以访问。指定服务器外网IP的话,任何人都可以通过[服务器IP:端口]来访问服务。当然,这个时候服务器本机也要输入外网IP:端口来访问。
举例说明:
你的IP是192.168.1.2,你可以ssh到外网某台服务器8.8.8.8,你内网里有一台机器192.168.1.3。
如果你想让外网所有的能访问8.8.8.8的IP都能访问192.168.1.3的http服务,那么可以执行:
ssh -R 8.8.8.8:8080:192.168.1.3:80 test@8.8.8.8
也就是说,ssh到8.8.8.8上,然后把本地局域网内192.168.1.3的80端口映射到8.8.8.8的8080端口上,这样外网任何一台可以访问8.8.8.8的机器都可以通过8080端口访问到内网192.168.1.3机器的80端口了。
反向连接同样支持各种服务。
3、用ssh做socks代理
假设你内网里某台机器可以上网,但是你不能上网,如果你有ssh到那台机器的权限,那么就可以利用ssh方式建立一个代理socks5,通过代理来上网。
命令:
ssh -D [本地IP或省略]:[本地端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]
道理和上面是一样的,执行这个命令之后,本地会监听指定的端口等待连接。
网上好多文章说Firefox和Chrome要下载什么插件才能支持,其实都是扯淡。
在配置代理的时候直接选择Sock5就可以了,不需要用户名和密码验证。另外,IE也是支持Sock5的,具体配置方法是:勾选为LAN使用代理服务器,然后任何字段都不要填,点“高级”按钮,在套接字里面填好相应的配置,其他都留空。
Chrome默认采用IE的配置,所以如果IE配置好了,Chrome也是可以上网的。
另外,可以使用一个叫做Sockscap的软件,把应用扔进去就能以代理的方式上网了。(部分需要调用多个进程的应用可能不行)
说句题外话,QQ2012版目前的Socks5代理上网功能貌似不支持本地Socks5代理,不过可以选择“浏览器配置”方式来规避。
把socks代理转换成http代理
如果你想把socks代理转换成http代理,可以用privoxy这个东东。去官网下载个.zip的文件包,然后解压到任意目录,执行可执行文件。
在主界面点击Options菜单->Edit Main Configuration,在弹出的文本文件中搜索forward-socks5,找到的章节就是讲socks5转换的。
回车新建一行,输入forward-socks5 / [本地IP]:[本地端口] . 注意后面还有个“.”,然后保存。
这样就可以实现把socks5代理转换成127.0.0.1:8118的http代理了。程序可以通过127.0.0.1:8118这个http代理上网。
如果你想让局域网内其他IP也能通过你的机器上网,需要修改配置文件中的listen-address部分,搜索一下相信你就会看明白了。
4、Windows下的ssh和ssh server
不要以为只有Linux下才能用ssh,Windows下一样有强大的ssh命令行工具和ssh服务器。并且对以上功能支持的都很好。
那就是伟大的PuTTY!去官方网站下载吧!
ssh命令行客户端对应的是plink.exe,命令稍微有一点不同(比如指定端口是大写的P),具体看帮助文件稍作修改就好了。
ssh服务器端是WinSSHD,傻瓜式安装,默认配置支持windows用户认证。
5、自动连接和防断线脚本
如果你想让连接长期保持,可以写个脚本来保证因为网络原因断线的话可以自动重连。
先说Windows平台,用plink -pw参数可以指定密码,所以只要写个批处理:
:1
plink -pw “password” -D 7070 user@serverip
goto 1
这样应该就可以解决大多数问题造成的断线。
Linux平台ssh默认不支持把密码作为参数,不过有sshpass可以搞定
http://sourceforge.net/projects/sshpass/files/latest/download
下载,解压,编译,把可执行文件拷贝到合适的目录,执行命令格式如下:
sshpass -p "password" ssh -D 7070 user@serverip
貌似ubuntu下可以直接apt-get install sshpass
然后写脚本autossh.sh,内容如下:
#!/bin/bash
while [ '' == '' ]
do
ssh_d_process_num=`ps aux|grep -E 'ssh \-' |grep -v grep |wc -l`
if [ "$ssh_d_process_num" == "0" ]; then
/home/user/sshpass -p "password" ssh -D 7070 user@ServerIP &
fi
sleep 300
done
执行一下这个脚本就可以了。sleep 300代表300秒查看一次,可以根据需要调整。
6、常用参数
其实一般来说不是很有必要加特殊的参数,不过以下几个可以根据需要选择
-q 静默运行,就算出错也啥都不提示
-f 后台运行
-C 压缩,带宽很差的时候压缩会快一些,否则会更慢
-i xxx.file 提供公钥文件直接验证
-l 指定用户名,其实就是@前面写的那个。
其他的不太常用,自己查手册吧~
使用ssh正向连接、反向连接、做socks代理的方法相关推荐
- 使用SSH做SOCKS代理
From: http://qiaodahai.com/ssh-socks-proxy.html 本文介绍如何使用SSH做SOCKS代理,通过Firefox浏览器上网. 首先,必须要有一个SSH账号. ...
- SSH隧道动态转发端口实现SOCKS代理 + HTTP代理(Privoxy)
一.文章概要 实现效果:ssh连接远程服务器进行网络转发,本地服务连接网络代理 环境:windows11/10 需要工具:MobaXterm(ssh隧道端口转发),Privoxy(socks转http ...
- 正向连接和反向连接的概念
正向连接和反向连接 正向连接 正向连接是受害主机监听一个端口,由控制主机主动去连接受害主机的过程,适用于受害主机具有公网ip的情况下.例如下面,受害主机具有公网ip,被控主机kali可以通过ip地址访 ...
- 内网安全学习(六)—域横向-内网漫游: Socks 代理
内网安全-域横向内网漫游 Socks 代理隧道技术 1.前置知识: 1)正向与反向连接: 正向就是你去连接被控主机,但由于机器处于内网内,分配的内网ip,无法直接找到,所以需要方向连接,即让主机连接我 ...
- ios设备使用socks代理
在linux上运行了socks5的代理客户端之后,发现我的iphone在局域网的详细信息里竟然无法设置socks代理,只有http代理,而我的代理客户端又不支持http代理,所以找了下iphone上设 ...
- SSH正向连接和反向连接
ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器. 反向连接是什么? 平时大多数使用ssh命令是控制端主机主动连接受控端主机,通过这个连接控制端主机可以 ...
- linux通过ssh实现反向连接
1.问题描述: 有时,我们会想在局域网外访问局域网内的机器.这时,我们可以使用SSH的反向连接来实现. 设备A:位于局域网内,可以访问代理服务器B. 假设该设备IP:A.A.A.A,用户名userA ...
- SSH反向连接及Autossh
SSH反向连接及Autossh http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html SSH反向连接及Autossh 0.接触 ...
- [转]SSH反向连接及Autossh
http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html SSH反向连接及Autossh 0.接触Linux恐怕对SSH再熟悉不过 ...
最新文章
- python csv库,Python 中导入csv数据的三种方法
- angular.element()的用法
- Maven安装和配置环境变量
- 洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)
- python爬虫作用小工具_【python小课堂|史上最全的Python爬虫工具列表大全】- 环球网校...
- 摆脱加卡他卡_如何通过三个简单的步骤摆脱“故事卡地狱”。
- Python爬取网页
- JMeter源码集成到Eclipse
- 东大OJ 2SAT 异或
- sublime text增加插入当前时间快捷键
- HTML请选择编程,html – 设计选择标记
- 用POP3获取邮箱邮件内容(完整C#源码)
- 无法打开包括文件: “SDKDDKVer.h”问题解决办法
- js实现商城特效---鼠标移入图片放大
- java html截图_Java实现网页截图/登录截图
- 计算机网络位置设置工作组,工作组设置【处置步骤】
- 【读书】兔兔西的已读书单
- 网络工程师学习必备!路由器的工作原理,你真的懂了吗?【超详细|深度解析】
- Ubuntu Edgy Sources list
- VMware16虚拟机安装