通过ssh反向连接内网主机的方法(防火墙的主机)
发布时间:2012-07-30 16:49:13 作者:佚名 我要评论
可以通过ssh反向连接到内网主机(有防火墙的主机),了解下,方便我们以后防御
一.用ssh反向连接内网主机
可以通过ssh反向连接到内网主机(有防火墙的主机)
好,下面是步骤:
0. 在两侧都安装ssh
1. 在被控端运行ssh -f -N -R 10000:localhost:22 username@主控端ip。这里的10000和22是端口号,也就是说,在主控端10000端口和被控端的22端口上建立了一个通道。
2. 在主控端运行 ssh username@localhost -p 10000。这里的username是你被控端的username,10000就是刚才的那个端口号。
ok了。
二.SSH公钥(public key)验证
也就是如何不用密码的SSH登录… 本讲解适用于Client/Server都使用OpenSSH的情况(商业版SSH的key文件格式有所不同,这里的方法直接使用是无效的)。
目标: Client 免输密码ssh登录Server
SSH支持多种登录验证方式,我们默认使用的是键盘交互方式(keyboard- interactive),也就是手工输入密码的那种。这里我们要改成公钥(publickey)验证方式,并且设置
passphrase为空,以达到免输密码登录的目的。
1. Client端:
cd ~/.ssh
#产生公钥文件(id_dsa.pub)和私钥文件(id_dsa), 类型DSA, 长度1024 bits
#注意询问passphrase的时候直接回车
ssh-keygen -t dsa -b 1024
#将公钥复制到远程主机去
scp id_dsa.pub Server:~/.ssh/id_dsa.pub.Client2. Server端:
cd ~/.ssh
#将Client的公钥放入Server的信任列表
cat id_dsa.pub.Client >> authorized_keys
#更新权限,很重要
chmod 0600 *从此以后Client SSH登录Server就不要手工输入密码了。
三.备注 – SSH常见术语及对应的解释
前提:内网机器能访问外网机器,但是只有局域网IP
首先要设置信任关系。
然后在内网机器上运行脚本auto.sh(我这里设置时每小时运行一次,保持连接40分钟,如果不连接会自动断开)
#!/bin/bash
ssh -R 2222:localhost:22 root@外网机器IP “touch login; sleep 2400; touch logout”
需要登录内网机器时,使用如下命令即可
ssh -p 2222 root@localhost
最近想在家里登录公司的机器查看代码,期间碰到了一些问题,因为公司里的机器是没有对外IP的,而且请网管
做个端口映射也比较麻烦,所以在家里不能直接连接到公司的机器上。在网上搜索了一下,找到了ssh反向连接这
个解决方法,成功解决了不能直接连接的问题,并对反向连接的实现感兴趣,按照自己的想法,写了一个简单的示
例。
SSH反向连接的使用
1、什么是反向连接?
反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
接主机B可以主动的向主机A发送一些请求。
2、为什么需要主机A主动去连接主机B呢?
这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
主机B请求连接。
3、SSH反向连接的过程
方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。然后主机B在
本地再创建一个本地连接,重定向到主机A和主机B刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到
远程连接上去。整个过程类似于文件的DUP,这就在主机A和主机B之间建立了连接通道,此时对于主机B来说,主
机A已经是可见了。
连接流程如下:
3.1、主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
3.2、主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
3.3、主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。
完成连接后,主机A对于主机B可见的形式就是存在于主机B的那个本地连接。
4、为什么需要在主机B对远程连接映射一个本地连接?
反向连接就是CS架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的CS方式是可以解决
主机A和主机B之间的连接问题,但是那样主机A和主机B的连接方式并不灵活,两者之间能做的事情,只能是CS之际
协议规定的事情。在主机B上建立了主机A的连接映射后, 对于主机B来说主机A已经不是局域网内那台不可见的主
机,主机A已经是存在主机B的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机A和主机B之间建立的那
个远程连接就是主机A和主机B的通道-“网线”。
5、SSH反向连接的使用
要建立反向连接,首先在主机A上运行:
代码: ssh -f -N -R 10000:localhost:22 lyb@jb51.net
10000是主机B上的本地连接端口, 22是主机B上远程连接的那个端口, lyb@jb51.net是主机B的地址
连接上后,会需要输入密码。连接成功后,SSH反向连接就建立起来了。要连接到主机A,在主机B上运行:
代码: ssh lyb@localhost -p 10000
即可。
—————————-
内网主机A(192.168.1.1) 外网主机 B(100.100.100.100)
正常情况 可以从内网主机A 通过ssh 连接到外网主机B
#ssh username@100.100.100.100
现在需要 通过外网主机B 连接 内网主机A
原理:
利用ssh自身功能, 建立 主机B 到主机A 的连接通道。
操作:
1.在主机A上建立通道
ssh -NfR 2222:localhost:22 httpd@100.100.100.100 -p 22
注释: -Nf 命令在后台运行
-R 建立反向通道
2222 在主机B上建立端口映射
localhost:22 将主机B端口2222 映射到主机A端口22上
httpd@100.100.100.100 远程登录主机B用户名及IP
-p 22 主机B ssh登录端口
执行后可以查看进程
ps axu |grep ssh
ssh -NfR 2222:localhost:22 httpd@100.100.100.100
2.登录主机B
查看已经建立好的映射端口
netstat -antp
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN -
登录内网主机A
ssh -p 2222 httpd@localhost
注释:
-p2222 已建立到内网主机A的映射端口
httpd 内网主机A的ssh 登录用户
@localhost 可以看到映射端口只监听到127.0.0.1 上
执行命令后显示登录成功,则大功告成
PS:
1. 如果用key登录则无须输入密码
2. 如果报错: Permission denied (publickey,gssapi-with-mic).
key不对或者key用户不对。
使用的过程中碰到一个问题, 就是在主机A上发起请求的时候, 需要输入密码。 如果我在家里, 不可能跑到公
司了去输入密码。于是用ssh public key的方法和写一个脚本来解决。脚本如下:
#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -N -R 10000:localhost:22 lyb@hahalee.jb51.net
fi
sleep 10
done
脚本的作用就是监控反向连接的服务, 在被异常中断的时候重启, 使用了SSH公钥后, 也不必跑到公司输入密码了。
可以通过ssh反向连接到内网主机(有防火墙的主机)
好,下面是步骤:
0. 在两侧都安装ssh
1. 在被控端运行ssh -f -N -R 10000:localhost:22 username@主控端ip。这里的10000和22是端口号,也就是说,在主控端10000端口和被控端的22端口上建立了一个通道。
2. 在主控端运行 ssh username@localhost -p 10000。这里的username是你被控端的username,10000就是刚才的那个端口号。
ok了。
二.SSH公钥(public key)验证
也就是如何不用密码的SSH登录… 本讲解适用于Client/Server都使用OpenSSH的情况(商业版SSH的key文件格式有所不同,这里的方法直接使用是无效的)。
目标: Client 免输密码ssh登录Server
SSH支持多种登录验证方式,我们默认使用的是键盘交互方式(keyboard- interactive),也就是手工输入密码的那种。这里我们要改成公钥(publickey)验证方式,并且设置
passphrase为空,以达到免输密码登录的目的。
1. Client端:
cd ~/.ssh
#产生公钥文件(id_dsa.pub)和私钥文件(id_dsa), 类型DSA, 长度1024 bits
#注意询问passphrase的时候直接回车
ssh-keygen -t dsa -b 1024
#将公钥复制到远程主机去
scp id_dsa.pub Server:~/.ssh/id_dsa.pub.Client2. Server端:
cd ~/.ssh
#将Client的公钥放入Server的信任列表
cat id_dsa.pub.Client >> authorized_keys
#更新权限,很重要
chmod 0600 *从此以后Client SSH登录Server就不要手工输入密码了。
三.备注 – SSH常见术语及对应的解释
前提:内网机器能访问外网机器,但是只有局域网IP
首先要设置信任关系。
然后在内网机器上运行脚本auto.sh(我这里设置时每小时运行一次,保持连接40分钟,如果不连接会自动断开)
#!/bin/bash
ssh -R 2222:localhost:22 root@外网机器IP “touch login; sleep 2400; touch logout”
需要登录内网机器时,使用如下命令即可
ssh -p 2222 root@localhost
最近想在家里登录公司的机器查看代码,期间碰到了一些问题,因为公司里的机器是没有对外IP的,而且请网管
做个端口映射也比较麻烦,所以在家里不能直接连接到公司的机器上。在网上搜索了一下,找到了ssh反向连接这
个解决方法,成功解决了不能直接连接的问题,并对反向连接的实现感兴趣,按照自己的想法,写了一个简单的示
例。
SSH反向连接的使用
1、什么是反向连接?
反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
接主机B可以主动的向主机A发送一些请求。
2、为什么需要主机A主动去连接主机B呢?
这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
主机B请求连接。
3、SSH反向连接的过程
方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。然后主机B在
本地再创建一个本地连接,重定向到主机A和主机B刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到
远程连接上去。整个过程类似于文件的DUP,这就在主机A和主机B之间建立了连接通道,此时对于主机B来说,主
机A已经是可见了。
连接流程如下:
3.1、主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
3.2、主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
3.3、主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。
完成连接后,主机A对于主机B可见的形式就是存在于主机B的那个本地连接。
4、为什么需要在主机B对远程连接映射一个本地连接?
反向连接就是CS架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的CS方式是可以解决
主机A和主机B之间的连接问题,但是那样主机A和主机B的连接方式并不灵活,两者之间能做的事情,只能是CS之际
协议规定的事情。在主机B上建立了主机A的连接映射后, 对于主机B来说主机A已经不是局域网内那台不可见的主
机,主机A已经是存在主机B的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机A和主机B之间建立的那
个远程连接就是主机A和主机B的通道-“网线”。
5、SSH反向连接的使用
要建立反向连接,首先在主机A上运行:
代码: ssh -f -N -R 10000:localhost:22 lyb@jb51.net
10000是主机B上的本地连接端口, 22是主机B上远程连接的那个端口, lyb@jb51.net是主机B的地址
连接上后,会需要输入密码。连接成功后,SSH反向连接就建立起来了。要连接到主机A,在主机B上运行:
代码: ssh lyb@localhost -p 10000
即可。
—————————-
内网主机A(192.168.1.1) 外网主机 B(100.100.100.100)
正常情况 可以从内网主机A 通过ssh 连接到外网主机B
#ssh username@100.100.100.100
现在需要 通过外网主机B 连接 内网主机A
原理:
利用ssh自身功能, 建立 主机B 到主机A 的连接通道。
操作:
1.在主机A上建立通道
ssh -NfR 2222:localhost:22 httpd@100.100.100.100 -p 22
注释: -Nf 命令在后台运行
-R 建立反向通道
2222 在主机B上建立端口映射
localhost:22 将主机B端口2222 映射到主机A端口22上
httpd@100.100.100.100 远程登录主机B用户名及IP
-p 22 主机B ssh登录端口
执行后可以查看进程
ps axu |grep ssh
ssh -NfR 2222:localhost:22 httpd@100.100.100.100
2.登录主机B
查看已经建立好的映射端口
netstat -antp
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN -
登录内网主机A
ssh -p 2222 httpd@localhost
注释:
-p2222 已建立到内网主机A的映射端口
httpd 内网主机A的ssh 登录用户
@localhost 可以看到映射端口只监听到127.0.0.1 上
执行命令后显示登录成功,则大功告成
PS:
1. 如果用key登录则无须输入密码
2. 如果报错: Permission denied (publickey,gssapi-with-mic).
key不对或者key用户不对。
使用的过程中碰到一个问题, 就是在主机A上发起请求的时候, 需要输入密码。 如果我在家里, 不可能跑到公
司了去输入密码。于是用ssh public key的方法和写一个脚本来解决。脚本如下:
复制代码
代码如下:#!/bin/bash
while true;do
RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"`
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -N -R 10000:localhost:22 lyb@hahalee.jb51.net
fi
sleep 10
done
脚本的作用就是监控反向连接的服务, 在被异常中断的时候重启, 使用了SSH公钥后, 也不必跑到公司输入密码了。
相关文章
- 云火墙与云防火墙的区别是什么?下面为大家介绍。2012-10-19
- RedHatLinux为增加系统安全性提供了防火墙保护。防火墙存在于你的计算机和网络之间,用来判定网络中的远程用户有权访问你的计算机上的哪些资源2012-07-13
- Firewall 防火墙,工作在网络或主机的边缘,对进出本网络或主机的数据包根据事先设置好的规则进行检查并且能够在数据包匹配到之后由预置的动作进行处理的组件的组合2012-07-11
- 这几天发现服务器上的Jmail发邮件失败,又不返回任何错误,只是发送过程很快,像是根本没执行,测试发现程序是顺利执行完成的2011-05-23
- 今天看了前面的原创帖子说到eweb遇到asp,asa,cer被限制访问拿不了shell,正好这个问题我是知道的。应该很多大牛都会的吧,估计还是有些不会的,就将就看看吧2011-05-10
- 经典高招打造自己的超级电脑防火墙网络安全中谈到个人上网时的安全,还是先把大家可能会遇到的问题归个类吧。2011-02-27
- iptables 这个指令, 如同以下用 man 查询所见, 它用来过滤封包和做NAT Network Address Translation(网路位址转译), 这个指令的应用很多, 可以做到很多网路上的应用.2009-06-18
- 扫不出肉鸡有很多的可能!一般有如下的情况! 1.你系统的防火墙,或某些补丁作怪! 2.有些地方是扫不到肉鸡的(是不是和各地的电信有关,暂时还不知道) 3.机子2008-10-08
- 弄到一个sa权限,利落得拿到一个webshell,透过sqlrootkit,俺就是system权限了.本以为对方菜到家了.谁知故事才刚刚开始.2008-10-08
- 前几天群里的兄弟给了一个网站,问我可不可以入侵2008-10-08
最新评论