z0nek

关于我

普通账户权限即可,启动监听特权端口需要root权限。
1)本地端口转发
ssh -qTfnN -L port:host:hostport user@remote_ip #正向隧道,监听本地port
参数详解:
-q Quiet mode. 安静模式
-T Disable pseudo-tty allocation. 不占用 shell 了
-f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数
-N Do not execute a remote command. 不执行远程命令,端口转发就用它了~
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。
我们在host1执行下面的命令:
[vincent@vincent rinetd]$ ssh -qTfnN -L 2345:192.168.192.120:22 root@172.16.100.167
其中:
host2 IP:192.168.192.120
host3 IP:172.16.100.167
命令中的L参数一共接受三个值,分别是”本地端口:目标主机:目标主机端口”,它们之间用冒号分隔。
然后看下host1的监听:
[vincent@vincent rinetd]$ netstat -ano | grep 2345
tcp 0 0 127.0.0.1:2345 0.0.0.0:* LISTEN off (0.00/0/0)
然后连接本地的2345端口即可访问host2的SSH

2)远程端口转发
ssh -qTfnN -R port:host:hostport user@remote_ip #反向隧道,用于内网穿透防火墙限制之类
host1 IP:192.168.192.120
host2 IP:172.16.100.167
host1与host2之间无法连通,必须借助host3转发。但是,如果host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。
我们在host3执行下面的命令:
ssh -qTfnN -R 2345:172.16.100.167:22 root@192.168.192.120
其中2345为host1的监听端口,22为host2的转发端口。
然后我们看host1的监听端口:
[root@server120 rinetd]# netstat -ano | grep 2345
tcp 0 0 127.0.0.1:2345 0.0.0.0:* LISTEN off (0.00/0/0)
此时我们通过ssh连接本地的2345端口即可访问host2的ssh。
看一下host3的进程:
[root@vincent rinetd]# ps axu | grep ssh | grep 2345
root 80061 0.0 0.1 62296 1288 ? Ss 12:58 0:00 ssh -qTfnN -R 2345:172.16.100.167:22

root@192.168.192.120
对应的连接:
[root@vincent rinetd]# netstat -anlp | grep 80061
tcp 0 0 172.16.100.134:58166 192.168.192.120:22 ESTABLISHED 80061/ssh

3)建立socks5代理
通过下面的命令我们可以建立一个通过123.123.123.123的SOCKS服务器。
1.ssh -N -f -D 1080 123.123.123.123 # 将端口绑定在127.0.0.1上
2.ssh -N -f -D 0.0.0.0:1080 123.123.123.123 # 将端口绑定在0.0.0.0上
然后使用proxychain就能访问内网网段


标签:linux

评论
© z0nek | Powered by LOFTER