分享免费的编程资源和教程

网站首页 > 技术教程 正文

ssh 代理详细解释

goqiw 2024-09-03 21:06:24 技术教程 13 ℃ 0 评论

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。


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表