日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ssh反向主动连接 及脚本加密

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ssh反向主动连接 及脚本加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????近來,在為公司客戶部署相關DNS系統服務,用于資源調度服務,但是客戶出口缺少公網ip地址,不能方便的去管理這臺服務器,開始想到使用teamviewer做中轉,穿透內網,但是在Centos環境下,照teamviewer官方給出的手冊嘗試安裝多次,未果,始終未能獲取ID號,甚至最后都安裝了圖形gnome環境,嘗試在圖形環境下安裝teamviewer,網絡始終是notReady,最后,只能放棄使用teamviewer,在公司找了臺有公網ip的機器,用ssh反向主動連接,也就是常說的端口轉發。

? ? 這種方式跟最早網上流行的反彈式遠程控制工具原理類似,像灰鴿子,任我行,Pcshare等等,包括現在很多***使用的遠程控制***程序都是這種主動連接反彈式***,“堡壘總是從內部突破容易的多”。

? ? 回歸正題,先來實操,最后上原理。


系統環境:

? ? ? ? ?公司主機:extrahost(代指主機名和ip,具有公網ip),用戶名:root ?ssh端口:2200

? ? ? ?客戶服務器:Intrahost(代指主機名和ip,私網ip做了NAT),用戶名:root ?ssh端口:2211

????????

ssh用到的參數:

????????-N:不執行何指令

????????????????-f:后臺執行

????????????????-R:建立反向 tunnel

在客戶的系統中輸入如下命令:

----------------------------------------------------------------------------------------------------------

?[root@Intrahost ]# ssh -NfR 2233:localhost:2211 root@extrahost?-p 2200

輸入密碼即可

//port2233指綁定遠程主機extrahost端口2233 ?

-------------------------------------------------------------------

?在公司管理設備查看端口2233是否在監聽狀態,netstat -ant,

?如果未成功監聽,請檢查管理設備防火墻 和sshd是否有相關訪問控制

?在公司管理主機extrahost輸入如下命令和密碼,登陸到客戶系統intrahost

--------------------------------------------------------------------

[root@extrahost]#ssh root@127.0.0.1 -p 2233?

//即可連接到客戶的服務器上

------------------------------------------------------------------


問題

一.連接穩定問題

? 由于是反向主動連接,在會話異常中斷,無法由控制端發起連接,我們可以借助幾個工具來幫我們保持會話。

? 1.使用autossh工具 ?

????安裝方法 autossh工具不在linux源中,需要從第三方源下載

? ? ?地址:http://pkgs.repoforge.org/autossh/?安裝包有32位和64位,下載根據操作系統去選擇。

????使用方法 跟ssh類似,區別autossh需要不斷去檢測ssh連接狀態,需要我們使用 -M參數,來指定autossh監聽端口:

---------------------------------------------------------------------------------------

???[root@Intrahost]autossh -M 1100 -NfR 2233:localhost:2211 root@extrahost?-p 2200

----------------------------------------------------------------------------------------

? ?2.使用nohup命令,截斷掛起信號

????用法:Usage: nohup COMMAND [ARG]... ??

????????????or: ?nohup OPTION

????示例:

------------------------------------------------------------------------------------

[root@Intrahost]nohup ssh -NfR 2233:localhost:2211 root@extrahost?-p 2200

來中斷對ssh的掛起信號。

---------------------------------------------------------------------------

? 3.建議大家使用nohup命令,這種方法可靠性很高,原因稍后闡述,現在我們來編寫腳本使用crond定時任何計劃來保持ssh會話,腳本內容如下。

?

#!/bin/bash?createTunnel()?{?? /usr/bin/ssh?-NfR?2233:localhost:2211?root@extrahost?-p?2200 if?[[?$??-eq?0?]];?then???? echo?Tunnel?to?jumpbox?created?successfully?? else???? echo?An?error?occurred?creating?a?tunnel?to?jumpbox.?RC?was?$??? fi } /bin/pidof?ssh if?[[?$??-ne?0?]];?then?? echo?Creating?new?tunnel?connection?? createTunnel fi

? 添加定時任務計劃,重復執行腳本來判斷通信隧道的建立

?-----------------------------------------------------

? ?命令:crontab -e

? ?*/1 * * * * /root/ReverseSsh.sh > tunnel.log 2>&1

??別忘了將腳本賦予執行權限

? ----------------------------------------------------

????chmod u+x?/root/ReverseSsh.sh

? -----------------------------------------------------

鄙人能看到和想到的維持會話的方法,就在這了,歡迎大家分享自己的創新方法。


二、安全性問題

????雖然我們坦然的建立了這條tunnel,可是大家忽略了一個東西,就是建立反向連接的tunnel時,我們需要輸入對方設備的密碼,假設我們的設備因為我們人品的關系,導致了重啟,這時,無論再好的保持會話的工具和命令,都沒辦法替你輸入密碼,除非,公司的客戶是你的好朋友或者至少是你信任的人,讓他幫你輸入密碼,很不幸,事情往往超乎我們的想象。

? ??

? ?所以,我們需要建立一個腳本,來替我們輸入密碼,并且對腳本進行加密,來防止客戶肆意窺探我們管理設備的密碼。也有,拿密鑰做認證來免密碼登陸,不建議大家這么做,這樣雖然方便管理,但同樣意味著客戶可以使用該設備隨意進入我們的管理設備,這是我們不愿意發生的事情,雖然我們的客戶很可愛而且善良和藹可親。

? ?

? 腳本內容如下,我們需要借助自動化工具expect,至于expect是怎樣的套件和工具,具體使用方法,大家可以去查資料學習,這個是我們自動化運維較常用的交互工具,建議大家掌握。

?except安裝方法,建議使用yum安裝:

----------------------------------------------

????????yum -y install expect*

----------------------------------------------

#!/bin/sh #?description:The?script?file?for?keepalive?ssh?session #?Founder?broadband?interconnection.DE?created?by?John.zhang #?update?20151104passwd=********expect?-c?" /usr/bin/ssh?-NfR?2233:localhost:2211?root@extrahost?-p?2200 set?timeout?5 expect?\"password:\" send?\"${passwd}\r\" expect?eof "

? ? 腳本內容功能實現簡單,大家可以盡情發揮,然后我們對該腳本文件進行加密,較常用的有三四種,我們這里推薦大家使用SHC工具,方便安全容易。


? 詳細的安裝方法大家去網上檢索,這里簡單飄過,我們只說使用方法。

? ? ?下載地址:wget?http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz

? ?

????下載后,我們進行解包,

????tar -xvf?shc-3.8.9b.tgz

? ??

? 這個包下到的不是源代碼,是預編譯好的文件,直接安裝即可make install

? ?

????使用示例:[root@Intrahost]#shc -r -f ~/ReverseSsh_pass.sh

????

????運行后會生成兩個文件,ReverseSsh_pass.x 和 ReverseSsh_pass.x.c.?? 其中sReverseSsh_pass.x是加密后的可執行的二進制程序;用./ReverseSsh_pass.x即可運行,ReverseSsh_pass.x.c是生成ReverseSsh_pass.x的原文件,建議大家拷貝到自己電腦,從服務器上刪除。并且對該程序添加執行權限,添加到開機啟動。

????????????????[root@Intrahost]#?vi /etc/rc3.d/S99local

????在該文件下邊寫入我們加密腳本后的程序 /root/ReverseSsh_pass.x,用于開機自啟動。注意這里是命令行方式,注意啟動級別。


三、原理闡述,大神可忽略。

?1.SSH reverse tunnel

????????

?? ?如圖,為ssh服務的正向和反向兩種會話連接示意圖,正常情況下(正向),我們由客戶端發起會話請求到服務端,使用ssh協議為我們建立起一條連接通訊,我們可以將這條連接看做是條隧道(tunnel),這樣我就可以使用終端工具來遠程管理我們的服務器,注意,這里我們并不是真正意思上打開了終端,而是我們在網絡層上,通過建立起來的隧道來連接到終端,所以我們把像使用putty,Securecrt這類工具,建立起連接呈現的終端也叫仿真終端。

? ??

????既然我們建立起這樣一條隧道,那必然每條隧道都有相同的端點,起始端和結束端,而這兩端的端點正是我們的客戶端和服務端,不同的是,正向連接是聲明要連接的對端ip和端口,而反向連接則是由服務端聲明可以連接到本機的對端ip和通訊端口。

????

????這里提醒大家的是,正向連接和反向連接,建立起隧道的方向是一致的,都是由客戶端作為起始端創建的通訊隧道,所謂的正向連接和反向連接取決于服務端在建立隧道的行為,正向連接,是被動接受來自客戶端的請求,建立連接;而反向連接則是由服務端主動請求連接,但創建會話連接的起始端始終是客戶端。

?????同樣,弄懂原理后,那么像Telnet,FTP,甚至是我們用來連接windows桌面的RDP,也可以實現反向連接,大家可以在網上搜搜具體方法。

?

????2.nohup

????

????剛才我們提到了nohup這個命令,這個理解其實很容易,從字面不難理解禁止掛斷,官方手冊解釋也很簡單,ignoring hangup signals,忽略掛斷信號,個人認為把它解釋為截斷掛斷信號,更好點,nohup實現原理像一個守護進程,但它工作的機制是信號量級的,當我們所運行的進程在異常中斷,或者超時的時候,會產生中斷信號,來結束該進程,節約資源開銷,nohup原理就是當收到來自針對該進程的中斷信號時,會阻止該信號的發送,從而保持進程的運行不會因為異常情況而中斷。

????使用這個命令的優勢很明顯,autossh保持會話的工作原理基本和我們編寫的腳本類似,而nohup工作機制直接是信號量級的,不需要通過執行另外的程序產生信號結果反饋,linux的信號機制起源于Unix系統,信號量由軟件產生,進程之間的通訊均由信號完成,所以nohup執行效率和穩定性相比autossh很高,或者說兩個沒有可比性,因為它們實現的方式不一樣。


?????就寫到這吧,路漫漫上下而求索,希望大家能提出更好的方法,最后附上相關組件和工具。



轉載于:https://blog.51cto.com/zj1991/1764244

總結

以上是生活随笔為你收集整理的ssh反向主动连接 及脚本加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。