精华内容
下载资源
问答
  • ssh反向连接
    2020-12-31 19:14:10

    [参考]

    https://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html

     

    SSH反向连接及Autossh

    0.接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,当然你肯定做不了Port Forwarding,除非你想在公司防火墙上拆个洞)。稍懂一点网络的童鞋会明白,Internet上去主动连接一台内网是不可能的,一般的解决方案分两种,一种是端口映射(Port Forwarding),将内网主机的某个端口Open出防火墙,相当于两个外网主机通信;另一种是内网主机主动连接到外网主机,又被称作反向连接(Reverse Connection),这样NAT路由/防火墙就会在内网主机和外网主机之间建立映射,自然可以相互通信了。但是,这种映射是NAT路由自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要再次主动连接到外网主机,建立连接。

     

    1.理论的介绍完了,下面实际操作:

    A要控制B

    A主机:外网,ip:123.123.123.123,sshd端口:2221

    B主机:内网,sshd端口:2223

    无论是外网主机A,还是内网主机B都需要跑ssh daemon

     

    1.1.首先在B上执行

    $ ssh -NfR 1234:localhost:2223 user1@123.123.123.123 -p2221

    这句话的意思是将A主机的1234端口和B主机的2223端口绑定,相当于远程端口映射(Remote Port Forwarding)。

    这里每次需要输入A主机user1的登陆密码,后面会讲到解决办法。

     

    1.2.这时在A主机上sshd会listen本地1234端口

    $ ss -ant
    
    State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
    LISTEN     0      128               127.0.0.1:1234                     *:*

    1.3.像平时一样连接到A主机的1234端口就可以控制内网B主机了

    $ ssh localhost -p1234

     

    2.一开始提到,这种反向连接(Reverse Connection)不稳定,可能随时断开,需要内网主机B再次向外网A发起连接,这时需要个“朋友”帮你在内网B主机执行这条命令。它就是Autossh。

    在此之前还要解决之前的一个问题,那就是每次内网主机B连接外网主机A时都需要输入密码,这个问题ssh本身是提供另外一种验证方式——通过密钥验证用户身份,实现自动登录。

     

    2.1.在内网B主机上生产公钥和私钥

    $ ssh-keygen
    ...(一直按Enter,最后在~/.ssh/下生成密钥)
    $ ls ~/.ssh/
    id_rsa id_rsa.pub known_hosts

     

    2.2.复制B主机上生成的id_rsa.pub公钥到外网A主机上,并将内容加入到~/.ssh/authorized_keys中

    $ cat id_rsa.pub >> ~/.ssh/authorized_keys

    试下,内网B主机连接外网A主机,就不再输入密码验证了

    补充:今天了解到ssh-copy-id这个命令,上面这个操作就变的简单了

    $ ssh-copy-id user1@123.123.123.123

     

    2.3.再来看看Autossh的用法

    $ autossh -M 5678 -NR 1234:localhost:2223 user1@123.123.123.123 -p2221

    比之前的命令添加的一个-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连,去掉了一个-f参数,因为autossh本身就会在background运行。

     

    3.终极方案:当重启内网B主机,谁来自动Autossh呢,加入daemon吧

    以daemon方式执行,相当于root去执行autossh, ssh,这时刚才普通用户目录下的.ssh/authorized_keys文件会不起效。有两种办法解决,一种是用autossh的参数指定.ssh路径;另外一种是以普通用户身份执行daemon,下面是第二种方式。

    /bin/su -c '/usr/bin/autossh -M 5678 -NR 1234:localhost:2223 user1@123.123.123.123 -p2221' - user1

    autossh还有很多参数,用来设置重连间隔等等。

    将上面命令放入下面各启动方式中,根据自己系统自己配置:

    SysV:/etc/inid.d/autossh

    Upstart: /etc/init/autossh.conf

    systemd: /usr/lib/systemd/system/autossh.service

     

     

    P.S.

    1.家里是ADSL的话,用DDNS,解决ip问题

    2.外网有路由的可设下端口映射

    3.虽然有密钥和密码保护,但还请小心使用

    更多相关内容
  • 什么是ssh反向连接? 反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连接主机B可以主动的向主机A发送一些请求。 应用场景 1、平时我们登录远程服务器,一般...

    什么是ssh?

    SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。

    什么是ssh反向连接?

    反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连接主机B可以主动的向主机A发送一些请求。

    应用场景

    1、平时我们登录远程服务器,一般使用ssh登录远程服务器
    在这里插入图片描述
    2、现在我们想通过远程服务器反向操作登录本地PC,但由于一般本地PC没有公网IP,导致远程服务器使用正常ssh命令无法登录PC,这个时候就需要使用ssh反向连接功能。
    在这里插入图片描述

    操作步骤

    1、使用ps -ef | grep sshd 确定主机A,和主机B都运行了sshd。如果没有运行sshd,则需要执行sudo apt-get install openssh-server 安装openssh-server
    在这里插入图片描述
    2、主机A执行命令与服务器建立连接:ssh -CqTfnN -R :11111:localhost:22 root@182.254.135.239,其中182.254.135.239是服务器的地址,然后输入主机B的密码。
    3、主机B(服务器)执行命令远程登录主机A:ssh test@localhost -p 11111,其中test为主机A的用户,然后输入主机A test用户的密码,即可ssh登录到主机A。

    展开全文
  • 先说ssh反向连接,这种连接方式适用于被访问的机器不能暴露于公共网络的情况,ssh可以链接到一个公开的服务器的一个端口,然后只要你能链接到这个公共服务器的端口,就可以想正常使用ssh一样访问客户机了,示意图...

    远程控制对运维人员和程序员都很重要,通常使用的是远程监控软件,比如teamviewer或者向日葵,这里说的两种方法都是需要自己动手并且需要一个公网服务器,从性价比上说应该是不如上面说的两种方式,但是满足了自己动手的目的,并且可以考虑在一些特殊情况下使用,比如不能安装远程监控软件,或者对用别人的服务器有抗拒心理,这种情况下就可以考虑了。
    首先来说我们使用的场景都是需要穿过防火墙,如果你的机器有关端口可以直接暴露在internet网上就没有必要了,可直接访问,
    其次我介绍两种方法,第一种适合于命令行模式,基本考虑用于linux,windows装了ssh也应该能用,但是只有命令行,另一种方法实际上是vpn,通过组建简单的vpn实现远程访问,可以适合于linux和windows,这个将在另一篇文章中。
    先说ssh的反向连接,这种连接方式适用于被访问的机器不能暴露于公共网络的情况,ssh可以链接到一个公开的服务器的一个端口,然后只要你能链接到这个公共服务器的端口,就可以想正常使用ssh一样访问客户机了,示意图如下
    在这里插入图片描述
    命令行参数-R就是起这个作用的,具体的命令格式如下:
    port:host:hostport port是指远端的连接端口,必须是一台在internet上可以直接访问的机器的某一个端口。host:hosport是准备控制机器的IP地址和端口号,如果是SSH没有改默认的端口号就应该是22,最终应该使用的命令行参数如下:
    -N -T -R xxxx:localhost:22 user@remoteip
    其中xxxx是公开机器上的一个端口, user是远程机器上的用户名,remoteip是远程机器的IP地址,一旦连接成功以后,你在本地的机器就可以登录到远程的公开IP地址的服务器然后用ssh命令访问这台控制的机器了:
    ssh -p xxxxx userid@localhost
    这里的xxxxx就是是上面连接的端口,userid是准备控制那台机器的合法用户名
    然后按照通常的ssh登录就OK了。
    这时候有人会问,我不想登录到服务器,想从本机访问可以吗?答案是OK,但是需要在远端公开IP的服务器上修改sshd的相关配置(编辑/etc/config/sshd_config):
    找到一个配置选项GatewayPorts设置为yes可以了
    然后在本机上直接输入 ssh -p xxxxx userid@remoteip就可以痛快地使用ssh去访问机器了。总结一下具体步骤是以下三步:

    1. 修改远程服务器上的ssh设置GatewayPorts为yes
    2. 使用命令ssh -fTNR xxxx:localhost:22 user@remoteip建立反向连接。
    3. 在本机上使用命令 ssh -p xxxx controlmachineuserid@remoteip

    从自动化使用的角度出发,每次要使用这个功能还需要手工启动一下这个反向连接,然后要输入密码,这太麻烦了,被控制的电脑肯定不会在你身边啊,怎么办?分两步解决这个问题:
    1.采用证书登录,这样避免每次需要收入密码,具体实现办法网上很多,搜索一下ssh-copy-id就有很方便的解决方案,我这里就不详细描述了。
    2.把启动反向连接过程做成一个启动的服务,如果想开机自动运行,使用命令 systemcltl enable xxxx,否则每次用手工start 有可以,下面说一下如何把 反向连接做成一个服务的过程:
    在此之前需要说明一下ssh方向连接的过程中很可能出现中断。导致无法使用,这时候也无法远程启动这个反向连接。这时候需要启动一个autossh的软件,该软件可以自动监控ssh的连接,如果连接出现错误可以自动重新连接,大大增加了反向连接的实用性。下面说一下如何用systemd建立一个服务,从而做到开机自动启动,也可以作为一个编写systemd 启动服务的一个参考:
    [Unit]
    Description=xxxxx

    Wants=network-online.target
    After=network-online.target

    [Service]
    Type=simple
    Environment=“AUTOSSH_GATETIME=0”
    User=xxxx
    WorkingDirectory=xxxx
    ExecStart=/usr/bin/startautossh
    ExecReload=/bin/kill -HUP
    RestartSec=5s
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
    关于上面的一些说明: Description= 这一行是描述,你可以根据自己的实际情况添加
    Environment=“AUTOSSH_GATETIME=0”
    AUTOSSH_GATETIME
    How long ssh must be up before we consider it a successful connection. Default is 30 seconds. If set to 0, then this behaviour is disabled, and as well, autossh will retry even on failure of first attempt to run ssh.
    这个参数在启动的时候有特别的意义,应该设置成0.
    user和workingdirectory按照自己实际情况设置即可。
    将文件命名为startautossh.service,然后将其拷贝到/lib/systemd/system目录下,然后必须运行命令
    stemctl enable startautossh.service
    这样该服务才能正常启动。

    需要指出的是,ssh是linux标准应用程序之一,这个方法的最大优点是只要在运行linux的机器上都可以支持这个方法,而开机服务启动各个linux的发行版不尽相同,但应该都有构建的方法,因此在所有linux平台上都可以方便的实现这套方法,前提是需要一个远端公开的服务器,如果没有,那就需要你把自己的机器某一个端口映射到一个可以控制机器能够访问的服务器上,效果也是一样的,下面说一下openwrt下的设置,openwrt已经有autossh的package,只要选中安装即可,但是需要修改如下几个地方:

    1. /etc/cofnig/autossh配置文件:option ssh 这个是命令行,需要根据你的实际情况设置。option enable 这个如果是开机启动需要设置成1,option monitorport 这个是监测端口,你根据实际情况填写
    2. /etc/autossh 脚本,需要在 执行程序后面增加一句 export HOME=/root 。
    3. 证书文件,openwrt的ssh用的是dropbear,用openssh的证书会出错。需要用dropbearconvert软件转换一下,在openwrt下才能使用,否则需要安装openssh的客户端,不能直接用openwrt默认的ssh程序
      需要指出的是远程连接需要一个用户,出于安全的考虑,可以新建一个用户,这个用户只用于连接,没有其他用途,这样在一定程度上可能带来风险。有什么疑问大家可以直接在评论中提问。我看到了就可以解答
    展开全文
  • SSH反向连接

    2015-11-18 18:11:00
    有时需要回家后控制公司内网Linux服务器,而先建立一条反向连接到外网服务器,然后回家后登录外网服务器控制公司内网服务器。 公司内网服务器: ssh -f -N -R 10000:localhost:22 root@外部服务器ip ...

    有时需要回家后控制公司内网Linux服务器,而先建立一条反向连接到外网服务器,然后回家后登录外网服务器控制公司内网服务器。


    公司内网服务器:

    ssh -f -N -R 10000:localhost:22 root@外部服务器ip


    10000是主动连接”外部服务器”的端口,用于等待连接并接收指令


    此时,输入外部服务器的root密码,才能连接成功,因为连接的时候使用的是root@外部服务器ip,可以改成其它用户名


    外部服务器:

    ssh root@localhost -p 10000


    此时,输入公司内网服务器的root密码,即可进入ssh


    转载于:https://my.oschina.net/u/2525089/blog/532168

    展开全文
  • 另一种就是SSH反向连接,就是内网是可以访问到外网的,那么内网主机先主动连接外网主机,这样一来就建立了连接,然后外网主机就可以ssh登录到内网主机了,这就是所谓的反向连接。对于外网来说,公司内部的是内网,...
  • 这篇文章说的不严谨的 我一开始学这个东西很迷惑 ...2、ssh 反向连接 客户端连服务端 然后客户端把能看见(访问)的东西 给服务端看 如果有三台计算机 A B C A的ip是 192.168.0.1 B 有俩 ip 192.168.0.2和10.10.10.1 .
  • 方案实现依靠以下几篇文章: http://blog.163.com/leekwen@126/blog/static/3316622920118144927681/ http://www.cnblogs.com/whltingyu/p/4083448.html ... 在android系统中移植ssh服务是基于实时维...
  • ssh 反向连接

    2018-10-23 17:19:19
    ssh -p 公网服务器ssh端口 -CqTfnN -R 0.0.0.0:公网映射出去的端口(被访问):192.168.1.8(内网ip):22 root@公网ip例如: ssh -p 1122 -CqTfnN -R 0.0.0.0:1123:192.168.1.8:22 root@8.8.8.8 用autossh方式: ...
  • ssh反向连接

    2014-11-09 10:24:43
    个解决方法,成功解决了不能直接连接的问题,并对反向连接的实现感兴趣,按照自己的想法,写了一个简单的示 例。 SSH 反向连接的使用 1 、什么是反向连接反向连接是指主机 A (受控端)主动连接主机 B (控制端)...
  • 0.接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,当然你肯定做不了Port Forwarding...
  • SSH正向连接和反向连接

    千次阅读 2019-04-27 14:34:48
    意思:连接主机connectToHost,监听本地的端口sorcePort,通过主机connectToHost,把到本地端口sorcePort的连接转发到主机forwardToHost的端口onPort。 图中的两个例子: your host是敲命令的主机。 ssh -L 123...
  • 配置ssh反向隧道 ssh -CNR 3307:localhost:3306 root@10.10.10.10 //把A主机本地3306端口映射到远程B机的3307端口,root是B的用户名,@后是B的IP地址,第一次ssh要输入yes,然后按照提示输入B的密码 这样就可以通过B...
  • SSH反向连接及Autossh

    2019-06-14 19:18:04
    SSH反向连接及Autossh 0 预备理论 接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,...
  • ssh反向连接内网主机可以通过ssh反向连接到内网主机(有防火墙的主机)好,下面是步骤:0. 在两侧都安装ssh1. 在被控端运行ssh -f -N -R 10000:localhost:22 username@主控端ip。这里的10000和22是端口号,也就是...
  • 1. 背景: 如何在公司外面,就可以访问公司内部的服务器; 如果在不能控制网络配置的情况下,将内网的服务器,向外提供网络服务(就是让外网的人,可以访问内网的服务器) ...就是在机器A上做到B机器的反向代理;然后...
  • SSH反向代理使用

    千次阅读 2022-02-09 21:34:03
    SSH反向代理 先说说什么是代理,源服务器由于各种原因无法访问目标服务器提供的服务,但是存在一个agent服务器,源服务器可以访问它,它可以访问目标服务器,那么源服务器的消息发给他,它在把请求转发给目标服务器...
  • ssh反向连接内网主机

    千次阅读 2013-10-09 19:59:41
    ssh反向连接内网主机 前提:内网机器能访问外网机器,但是只有局域网IP 大意就是说可以通过ssh反向连接到内网主机(有防火墙的主机) 好,下面是步骤: 0. 在两侧都安装ssh 1. 在被控端运行 ssh -f -N -R...
  • ssh反向连接和简单实现 公司的服务器要传个东西到另外一台服务器,是让我最头疼的一件事,因为要先连跳板服务器a,才能再连服务器b,服务器c不能直接访问b,是不是头有点晕了,好了不纠结这些了,今天我发现了另外一个...
  • 通过ssh反向连接内网主机的方法

    千次阅读 2016-11-18 14:22:23
    SSH反向连接的使用1、什么是反向连接?反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连接主机B可以主动的向主机A发送一些请求。2、为什么需要主机A主动去连接...
  • ssh反向隧道Eny Setiyowati/Shutterstock.comEny Setiyowati / Shutterstock.comNeed to SSH to an unreachable Linux computer? Have it call you, then burrow down that connection to get your own remote SSH ...
  • SSH反向连接及Autossh 0.接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,当然你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,534
精华内容 8,213
热门标签
关键字:

ssh反向连接

友情链接: 1.zip