一用反向连接内网主机 可以通过反向连接到内网主机(有防火墙的主机) 好,下面是步骤:在两侧都安装在被控端运行 - -n -r@主控端。这里的和是端口号,也就是说,在主控端端口和被控端的端口上建立了一个通道。在主控端运行@ - 。这里的是你被控端的,就是刚才的那个端口号。 了。 二ssh公钥( )验证 也就是如何不用密码的ssh登录&; 本讲解适用于cs都使用ossh的情况(商业版ssh的文件格式有所不同,这里的方法直接使用是无效的)。 目标 c 免输密码登录s ssh支持多种登录验证方式,我们默认使用的是键盘交互方式(- ),也就是手工输入密码的那种。这里我们要改成公钥()验证方式,并且设置 为空,以达到免输密码登录的目的。c端~ #产生公钥文件(_)和私钥文件(_), 类型dsa, 长度#注意询问的时候直接回车 - --#将公钥复制到远程主机去_ s~_c s端~ #将c的公钥放入s的信任列表_c &;&; _ #更新权限,很重要 *从此以后c ssh登录s就不要手工输入密码了。 三备注 &; ssh常见术语及对应的解释 前提:内网机器能访问外网机器,但是只有局域网ip 首先要设置信任关系。 然后在内网机器上运行脚本(我这里设置时每小时运行一次,保持连接分钟,如果不连接会自动断开) #!-r@外网机器ip;; 需要登录内网机器时,使用如下命令即可-@ 最近想在家里登录公司的机器查看代码,期间碰到了一些问题,因为公司里的机器是没有对外ip的,而且请网管 做个端口映射也比较麻烦,所以在家里不能直接连接到公司的机器上。在网上搜索了一下,找到了反向连接这 个解决方法,成功解决了不能直接连接的问题,并对反向连接的实现感兴趣,按照自己的想法,写了一个简单的示 例。 ssh反向连接的使用 什么是反向连接? 反向连接是指主机a(受控端)主动连接主机b(控制端),在主机a和主机b之间建立一个远程连接,通过这个连 接主机b可以主动的向主机a发送一些请求。 为什么需要主机a主动去连接主机b呢? 这是因为主机a在局域网内,如果没有对主机a进行端口映射,对于主机b来说主机a是不可见的,如果在主机b这 边向主机a发送连接请求,这个请求是不可达的。而主机b有自己独立的ip,对于主机a来说是可见的,可以直接向 主机b请求连接。 ssh反向连接的过程 方法就是主机a主动去连接主机b,主机b响应主机a的连接请求,它们之间就建立了一个远程连接。然后主机b在 本地再创建一个本地连接,重定向到主机a和主机b刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到 远程连接上去。整个过程类似于文件的dup,这就在主机a和主机b之间建立了连接通道,此时对于主机b来说,主 机a已经是可见了。 连接流程如下: 主机a 客户端向主机b 服务端发送请求,建立远程连接。 主机b 服务端创建本地连接很远程连接的映射(反向连接通道)。 主机b 客户端向主机b 服务端的连接通道发送请求, 建立主机b 和主机a 的连接。 完成连接后,主机a对于主机b可见的形式就是存在于主机b的那个本地连接。 为什么需要在主机b对远程连接映射一个本地连接? 反向连接就是cs架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的cs方式是可以解决 主机a和主机b之间的连接问题,但是那样主机a和主机b的连接方式并不灵活,两者之间能做的事情,只能是cs之际 协议规定的事情。在主机b上建立了主机a的连接映射后, 对于主机b来说主机a已经不是局域网内那台不可见的主 机,主机a已经是存在主机b的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机a和主机b之间建立的那 个远程连接就是主机a和主机b的通道-网线。 ssh反向连接的使用 要建立反向连接,首先在主机a上运行: 代码- -n -r@ 是主机b上的本地连接端口, 是主机b上远程连接的那个端口, @是主机b的地址 连接上后,会需要输入密码。连接成功后,ssh反向连接就建立起来了。要连接到主机a,在主机b上运行: 代码@ -即可。 - 内网主机a() 外网主机 b() 正常情况 可以从内网主机a 通过 连接到外网主机b # @ 现在需要 通过外网主机b 连接 内网主机a 原理: 利用自身功能, 建立 主机b 到主机a 的连接通道。 操作: 在主机a上建立通道-nr@ -注释: -n 命令在后台运行 -r 建立反向通道在主机b上建立端口映射将主机b端口 映射到主机a端口上 @ 远程登录主机b用户名及ip -主机b 登录端口 执行后可以查看进程 | -nr@ 登录主机b 查看已经建立好的映射端口- * listen - 登录内网主机a-@ 注释: - 已建立到内网主机a的映射端口内网主机a的 登录用户 @ 可以看到映射端口只监听到 上 执行命令后显示登录成功,则大功告成 ps:如果用登录则无须输入密码如果报错: p(,--) 不对或者用户不对。 使用的过程中碰到一个问题, 就是在主机a上发起请求的时候, 需要输入密码。 如果我在家里, 不可能跑到公 司了去输入密码。于是用的方法和写一个脚本来解决。脚本如下: 复制代码代码如下 #!; ret=`|" - -n -r " |- ""`[ "$ret" = "" ]; ""- -n -r@ 脚本的作用就是监控反向连接的服务, 在被异常中断的时候重启, 使用了ssh公钥后, 也不必跑到公司输入密码了。 高防ip