1. 程式人生 > >利用ssh反向代理以及autossh實現從外網連線內網伺服器

利用ssh反向代理以及autossh實現從外網連線內網伺服器

前言

最近遇到這樣一個問題,我在實驗室架設了一臺伺服器,給師弟或者小夥伴練習Linux用,然後平時在實驗室這邊直接連線是沒有問題的,都是內網嘛。但是回到宿舍問題出來了,使用校園網的童鞋還是能連線上,使用外網的小土豪就沒有辦法進入內網。這時能不能有一個辦法可以使得通過外網連線到內網的伺服器呢?答案是有的,不過這裡就需要以下條件:一臺在外網能訪問到的伺服器。

1. 描述一下目前的機器狀況,梳理梳理:

機器 IP 使用者名稱 備註
A 10.21.32.106 gdut728 目標伺服器,處於內網
B 123.123.123.123 root 外網伺服器,相當於橋樑的作用

PS:123.123.123.123只是我隨意起的,大家請別攻擊別人的伺服器啊啊啊

2. 解決方法:

通俗地說:就是在機器A上做到B機器的反向代理;然後在B機器上做正向的代理實現本地埠的轉發

2.1 實現前的準備

每臺都要安裝ssh的客戶端。

在這裡我使用的是centos7,都自帶ssh。如果是使用其他版本Linux,請手動Google一下咯。

2.2 介紹一下使用到的ssh引數:

反向代理

ssh -fCNR

正向代理

ssh -fCNL

-f 後臺執行ssh指令
-C 允許壓縮資料
-N 不執行遠端指令
-R 將遠端主機(伺服器)的某個埠轉發到本地端指定機器的指定埠
-L 將本地機(客戶機)的某個埠轉發到遠端指定機器的指定埠 -p 指定遠端主機的埠 ******************區分大小寫啊各位親******************
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3. 首先在A上面操作:

建立A機器到B機器的反向代理,具體指令為

ssh -fCNR [B機器IP或省略]:[B機器埠]:[A機器的IP]:[A機器埠] [登陸B機器的使用者名稱@伺服器IP]
  • 1

在這裡我使用了B機器的7280埠,以及A機器的22埠,按照上面的指令就是這樣子的操作

ssh -fCNR 7280:localhost:22 root@123.123.123.123
  • 1

檢驗是否已經啟動了可以使用ps aux | grep ssh

指令來檢視:

4. 接著在B上面操作:

建立B機器的正向代理,用來做轉發,具體指令為

ssh -fCNL [A機器IP或省略]:[A機器埠]:[B機器的IP]:[B機器埠] [登陸B機器的使用者名稱@B機器的IP]
  • 1

按照第3那裡輸入的指令,這裡的B機器的埠和上面的B機器的埠是一致的,埠1234的也是B機器的。

ssh -fCNL *:1234:localhost:7280 localhost
  • 1

檢驗是否已經啟動了可以使用ps aux | grep ssh指令來檢視:

在此1234埠為本地轉發埠,負責和外網進行通訊,並將資料轉發的7280這個埠,實現了可以從其他機器訪問的功能。同時,*號表示可以接受任何IP的訪問。

5. 展現奇蹟的時候到了

至此我們都配置好了AB機器,那麼我們就可以從一部外網的電腦登陸到內網裡面去啦。鑑於我目前的電腦在內網,而伺服器都是外網的(也就是配置的B機器),所以可以通過B機器連線到我內網的A中,具體指令為:

ssh -p1234 gdut728@123.123.123.123 
  • 1

在此-p引數為指定登陸的IP,我們在上面指定了1234埠為轉發埠,故用1234埠登陸,然後gdut728是內網A機器的使用者名稱,123.123.123.123為外網B機器的IP地址。

6. 這種反向代理的方式是不穩定的

不幸的是這種ssh反向連結會因為超時而關閉,如果關閉了那從外網連通內網的通道就無法維持了,為此我們需要另外的方法來提供穩定的ssh反向代理隧道。

6.1 ssh每次重連都需要鍵入密碼,故在此首先設定免密碼登陸到內網

在內網的機器A上面執行:

ssh-copy-id 內網使用者名稱@外網IP -p指定轉發的埠
  • 1

按照之前我設定的埠,這個指令就是如下

ssh-copy-id [email protected]123.123.123.123 -p1234
  • 1

那以後這臺內網的A機器ssh登陸我外網的B機器就可以免密碼登陸啦~ 
檢驗是否已經可以使用免密碼登陸可以使用如下指令來檢驗:

ssh root@123.123.123.123
  • 1

6.2 用autossh建立穩定隧道

centos7上沒有預設安裝autossh的,所以使用一下命令安裝

yum install autossh
  • 1

來看看具體的autossh的指令為

autossh -M 7281 -fCNR 7280:localhost:22 root@123.123.123.123 
  • 1

autossh的引數與ssh的引數是一致的,但是不同的是,在隧道斷開的時候,autossh會自動重新連線而ssh不會。另外不同的是我們需要指出的-M引數,這個引數指定一個埠,這個埠是外網的B機器用來接收內網A機器的資訊,如果隧道不正常而返回給A機器讓他實現重新連線。

這裡寫圖片描述

7. 最後配置在Linux上配置開機自動啟動autossh,免去了重啟Linux後要自己啟動的autossh的麻煩

輸入:

vi /etc/rc.d/rc.local

新增內容:

autossh -M 7281 -fCNR 7280:localhost:22 [email protected]

因為centos7之後,原來直接修改/etc/rc.d/rc.local啟動指令碼自動生效的功能因為修改了需要重新賦予可執行許可權

再輸入 chmod +x /etc/rc.d/rc.local

8. 結言:

總算配置好了,目前不清楚會不會斷線,明天看看什麼情況再進行更新吧。如有不對之處,請大家指正提出~

參考以下網站

相關推薦

利用ssh反向代理以及autossh實現連接服務器

作用 鏈接 沒有 AI tail oca 麻煩 版本 正向代理   1. 描述一下目前的機器狀況,梳理梳理:    機器 IP 用戶名 備註    A 10.21.32.106 gdut728 目標服務器,處於內網    B 123.123.123.123 root 外網服

利用ssh反向代理以及autossh實現連線伺服器

前言 最近遇到這樣一個問題,我在實驗室架設了一臺伺服器,給師弟或者小夥伴練習Linux用,然後平時在實驗室這邊直接連線是沒有問題的,都是內網嘛。但是回到宿舍問題出來了,使用校園網的童鞋還是能連線上,使用外網的小土豪就沒有辦法進入內網。這時能不能有一個辦法可以使得通過外

利用反向SSH訪問伺服器

學院的伺服器在學院的內網,出了學院就不能訪問,在宿舍、家裡學習很不方便沒有伺服器的話。之前一直用TeamViewer,但是用著不舒服。最近新找到一個辦法,就是利用外網伺服器以及反向SSH搭一條通道,使

ssh反向代理實現NAT穿透[ssh版teamviewer]

由於實驗室伺服器沒有公網IP,如果在校外網的話只能通過teamviewer遠端桌面連線,然而teamviewer的資料傳輸是基於影象的,反應太慢了,所以一直在尋找ssh版的teamviewer,經過谷歌,發現只需要一臺公網伺服器作為中轉站,就可以實現在任何地方登

藉助SSH反向代理實現在家裡遠端登入公司電腦(一)

轉自:https://blog.csdn.net/mitant/article/details/10714699針對這個問題首先要對現實場景做下簡要介紹,公司裡的電腦可以訪問外部網路,但是公司又沒開通VPN原則上未提供在家裡接入公司電腦的途徑,但偶爾會需要在家裡接入公司電腦。

SSH反向連線Autossh 實現訪問樹莓派

需要一臺vps伺服器,樹莓派連上vps,再通過vps來訪問樹莓派 1.在樹莓派上設定 sudo screen -S sshtest ssh -R 19999:localhost:22 你的vps使用者名稱@你vps的ip      意思:將vps上的19999埠與樹莓派的

通過ssh反向隧道及nginx反向代理實現控制nodemcu晶片

基本思路:通過ssh反向隧道實現外網伺服器埠到內網中繼伺服器埠的轉發,通過配置內網中級伺服器nginx反向代理,將外網發過來的請求轉發到目標伺服器上。最後實現通過訪問外網ip轉到訪問內網的目標伺服器。 (一)ssh反向隧道將外網伺服器埠轉發到內網中繼伺服器指定埠 (1)首

SSH反向代理實現訪問伺服器

機器狀況 機器號 IP 使用者名稱 備註 A 192.168.1.130 usr_a 目標伺服器,在區域網中,可以訪問 A B B.B.B.B usr_b 代理伺服器,在外網中,無法訪問 A C - - 可以直接訪問 B,無法直接訪問 A

反向代理---squid的實現

emc 數據 更改 system 命令 conf new 20px nbsp 一、目的 通過配置代理服務器,實現以下目標:代理服務器可以將遠程的Web服務器頁面緩存在本地代理服務器端口設置為80端口用戶通過訪問代理服務器即可獲得遠程Web服務器上的頁面內容遠程Web服

Nginx反向代理以及負載均衡配置

ces 指定 cep msi 負載 禁止 大小 解決 nginx配置 項目地址:http://git.oschina.net/miki-long/nginx 前提:最近在研究nginx的用法,在windows上小試了一下,由於windows下不支持nginx緩存配置,所以本

ssh反向代理設置

主機 端口 終端 lis gre 127.0.0.1 方式 ssh 執行 一、功能描述:通過ssh反向代理服務器使得沒有公網ip的Linux服務器可以被外網訪問。1、實驗主機ip:(1)終端1(192.168.1.101):在局域網內,可以訪問外網,無公網ip(2)終端2(

nginx反向代理tomacat+keepalived實現動靜分離、負載均衡、高可用

時間 超時 error css 權限命令 上傳 轉發 onf ioc 本文的動靜分離主要是通過nginx+tomcat來實現,其中nginx處理圖片、html、JS、CSS等靜態文件,tomcat處理jsp、servlet等動態請求 服務器名稱

SSH反向代理

客戶端 127.0.0.1 登陸 port conf 監聽端口 如果 自動 bsp 服務器設置 # 打開GatewayPorts支持 vim /etc/ssh/sshd_config GatewayPorts yes # 重啟ssh服務 service sshd re

讓AWS虛機訪問公司資源(SSH反向代理

背景說明 今天我要將AWS虛機升級到beta版本並進行一些測試。 由於beta版本只在公司內網提供,因此我需要將升級用的檔案手動拷貝到AWS虛機中。原始的方法,很容易理解: 用AWS上能找到的最新版本AMI啟動一個虛機。 將映象檔案RHEL-7.4-201706

nginx反向代理html,實現前後端分離部署

前後端分離開發、部署,融到一個專案中部署,修改程式碼部署較為頻繁,前端改動一小點也都需要後端一起打包部署。固想了nginx部署一個代理即可。  下載好nginx後在nginx.conf中增加如下程式碼: server { listen 8082;

穿透 - SSH反向代理

SSH反向代理有著很廣泛的實際應用, 例項描述: 本人在家庭區域網放置有一個樹莓派主機(無公網ip),正常情況下只能在家庭區域網內通過 ssh連線這臺樹莓派主機,但如果本人想在其他地方(非本地區域網)對它進行遠端登陸,則需要進行SSH反向代理。 如下圖示例,我的樹莓派主機A可以pin

NGINX如何反向代理Tomcat並且實現Session保持

簡介 LNMT=Linux+Nginx+MySQL+Tomcat; Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器; 在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選;   架構需求 Tom

利用Apache反向代理解決前後端造成的跨域問題

Apache可以被配置為正向(forward)和反向(reverse)代理。 正向代理是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端

ubuntu server ssh反向代理搭建

最近做了一個小實驗,嘗試在校外網ssh連線一臺學校內的伺服器。在研究了ssh的反向代理後,明白了該如何去做。 說明一下,我有一臺公網的伺服器,將其配置為ssh中繼伺服器。假設它的IP為 delay_server_ip。在整個配置過程中,唯一重要的也就是這個中繼伺服器的ip。 首先

利用nginx 反向代理解決跨域問題

server { listen 8094; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; loc