zoukankan      html  css  js  c++  java
  • ssh的使用技巧

    【前言】

    最近一直在使用ssh协议的端口转发(隧道)功能,完成对内网空透等。这篇文章将主要讲解3种常用的ssh tunnelling使用方法和基本原理。

    在介绍具体内容前,我先奉上端口转发的常用情景:

    图中的“我”,现在是要访问内部网站的192.168.1.0/24网段里面的服务器,然而由于不在一个网段,我是不可以直接ssh到内部网络的服务器。

    通常的做法是先ssh到“SSH Server”,然后再在ssh server上访问内部网站的服务器

    我能不能不用上ssh server就直接ssh到内部服务器呢?从下面的文章你将得到答案。

    SSH 端口转发主要有3种方式:

    • 本地端口转发

    格式如下:

    ssh -L [bind_address:]port:host:hostport <user>@<ssh server>

    如上图我现在要直接访问IP地址为192.168.1.2的服务器,可以在本地(SSH Client)这样做:

    Step 1:

    ssh -N -L 11122:192.168.1.2:22 peter@10.1.1.1

    或者:

    ssh -N -L 10.10.10.10:11122:192.168.1.2:22 peter@10.1.1.1
    # 如果你想绑定本机特定的IP可以在port前加上IP地址,如上面的10.10.10.10

    注意:peter是SSH Server上的一个用户名,“-N” 表示不执行命令,也就是不登录到SSH Server上去。

    输入SSH Server密码,命令会等在那,不要结束这个就行

    Step 2:

    ssh -p 11122 <192.168.1.2的用户名>@127.0.0.1

    或者:

    ssh -p 11122 <192.168.1.2的用户名>@10.10.10.10

    输入192.168.1.2服务器的密码,就登录了内部网络的192.168.1.2的机器了。

    原理分析:

    当你执行Step 1的命令时,ssh client程序会在本地监听指定的11122端口,你可以通过下面命令看到

    netstat -ntlp |grep 11122

    然后我们在Step 2中,我们ssh其实连接的是本地的11122端口,ssh client程序会帮我们转发到SSH Server的,然后SSH Server再帮我们转发到我们指定的192.168.1.2上的22端口


    • 远程端口转发

    格式如下:

    ssh -R [bind_address:]port:host:hostport <user>@<ssh server>

    与 “本地端口转发”最大的不同是,这个命令后,绑定的端口不在是本地的端口,而是SSH Server(10.1.1.1/192.168.1.1)上的端口

    注意:由于默认配置下,远程SSH Server只能绑定到127.0.0.1地址上,所以SSH Server以外的机器是不能使用到这个端口转发的,解决方法:

    用sudo权限打开SSH Server上的/etc/ssh/sshd_config: sudo vim /etc/ssh/sshd_config ,加入 

    GatewayPorts yes

    然后重启ssh service: sudo service ssh restart

    Step 1:

    ssh -N -R *:11122:10.10.10.11:22 peter@10.1.1.1

    *是用来表示使用SSH Server的所有地址,你也可以使用10.1.1.1这个地址,其中10.10.10.11是我上图 SSH Client同网络的其他客户端机器的IP.

    Step 2:

    ssh -p 11122 <192.168.1.2上的用户>@10.1.1.1

    注意,跟本地端口转发不同的是,上面的地址和端口都是远程SSH Server的。

    192.168.1.X 网络的机器就通过gateway与ssh client之间的SSH隧道访问到了10.10.10.X网络的IP:10.10.10.11

    • 动态端口转发

    格式如下:

    ssh -D [bind_address:]port <user>@<ssh server>

    前面我介绍的两种方式都有一个比较大的问题,只能做到点对点的代理,或者说一个主机的port到另一个主机port上的映射,

    动态端口就是用来解决这个问题的,完成从点到面的代理,或者说完成本机一个port到任意远程地址和端口的映射

    一个比较典型的应用就是web代理服务器,下面我们准备把SSH Server变成一个web代理服务器

    Step 1:

    ssh -N -D 3456 peter@10.1.1.1

    注意:现在SSH Client的3456就被用来转发http请求了

    Step 2:

     设置Firefox使用本地127.0.0.1的3456端口来做http代理,如下图设置:


     注意上图,一定要选择SOCK5 或者SOCK4,因为ssh只能作为SOCK主机而不是一般的HTTP主机代理

    这样,我们就可以使用SSH Server的代理,用Firefox来访问所有的页面了。

  • 相关阅读:
    Github基于Web的编辑器
    科技爱好者周刊(第 172 期):我们会死于气候灾难吗?
    走进京东618大促“产星”之路
    科技爱好者周刊(第 171 期):云服务流量有多贵?
    科技爱好者周刊(第 170 期):软件订阅制的胜利
    科技爱好者周刊(第 169 期):五菱汽车的产品设计
    在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)
    mac 更新到big sur 后,parallels虚拟机的一些问题:由于您尚未获得访问其中一些文件的授权,所以您不能恢复“Windows 10
    React/Vue 项目在 GitHub Pages 上部署时资源的路径问题
    科技爱好者周刊(第 168 期):游戏《底特律:变人》
  • 原文地址:https://www.cnblogs.com/bryant-dai/p/7979244.html
Copyright © 2011-2022 走看看