有時候我們需要 通過套接字傳輸數據 在不同機器之間進行連接,例如Telnet連接,FTP文件下載,SQL查詢或任何其他類型的傳輸。
該數據通過網絡原始傳輸,因此 不安全的,這意味著它們可能會被起點和終點之間路徑上的任何節點(即, 羅巴多斯.
我們無法阻止捕獲這些數據,但是我們可以阻止的是第三方會對其進行解釋和理解,從而對通信進行加密。
SSH 是允許我們做的工具 安全連接 在機器之間。 它最常見的用途是遠程連接到命令解釋器。
但是,它提供了其他可能性,例如創建 加密隧道 在不同的機器之間。
假設我們要從host1 telnet到host2:
host1$ telnet host2
這種溝通是完全開放的,可以 被攔截。 為了保護它,我們將主機5000上任意選擇的端口(例如1)重定向到主機23上的端口2(telnet)。
這樣,我們將獲得所有發送到host5000的端口1的數據,以加密方式通過ssh通過host22的端口2打開的隧道傳輸,然後重定向到host23的端口2,從而到達其最終目的地。
為此,我們需要知道host2的用戶名和密碼。
要打開隧道,我們寫:
host1$ ssh -R 5000:localhost:23 usuariohost2@host2
好吧:
host1$ ssh -L 5000:host2:23 usuariohost2@host2
這兩個選項是等效的。 要建立telnet連接,我們不再引用host2,而是引用host1上的所選端口:
host1$ telnet localhost 5000
這樣,無論是telnet還是其他方式,我們都能確保任何通信的安全。 多做一些調查,由於 SSH 也可以將這些重定向轉移到第三台計算機,這將使我們能夠通過一個入口點就可以安全地從整個LAN訪問另一個LAN。
該理論看起來非常有趣,但是如果我們看到一個實際案例,那就更是如此。
事實是,即使我很矮,我還是喜歡這篇文章。
也許看一下您受到啟發的維基 https://wiki.archlinux.org/index.php/Secure_Shell#Forwarding_other_ports
和相同,但autossh部分 https://wiki.archlinux.org/index.php/Secure_Shell#Autossh_-_automatically_restarts_SSH_sessions_and_tunnels
實際上,您可以通過ssh發送的任何內容,無論是流媒體還是與主機的連接。 等等出於x原因,您想對其進行加密。
和securecrt規則
有時我會在非常基本的級別上使用SSH。 默認端口是22,對吧?
因此,如果我理解正確,我的電腦是主機1,而我想連接的主機是host2,那麼此隧道會在端口5000和端口23之間建立連接,然後在端口22上連接?
為什麼要切換端口的原因? 可以使用端口22創建隧道嗎?
非常有趣的文章。 像納米一樣,我還想要更多!
SSH確實確實默認使用端口22(儘管可以更改)。 該端口是兩個主機之間實際通信所使用的端口。 您必須確保它是打開的並且沒有防火牆將其切斷。 但是對於用戶而言,它是完全透明的。 您可以忘記它。 在示例中,重定向在端口5000和23之間。這兩個是您唯一需要擔心的。 用戶將看到他發送到其主機的端口5000的所有內容都顯示在目標主機的23處。
顯然,每個用戶都可以重定向他認為合適的端口。
感謝您的意見。 這是我的第一篇文章,您的意見將有助於使下一篇更好。
VPS也可以做到嗎?
好的,這是我的情況,PC1可以訪問服務器,但是PC2不能,都通過ssh連接,我想在PC2中訪問,但是我應該重定向PC1的哪個端口? 如果實際上我要從PC2到達服務器端口,並且數據包以PC1作為其源IP。 我懂嗎
你讓自己理解。 在這種情況下,您需要PC1將PC2的端口重定向到服務器的端口22:
PC2 $ ssh -L 5000:服務器:22個用戶PC1 @ PC1
並從另一個終端保持此連接打開:
PC2 $ ssh userServer @本地主機-p 5000
你已經在裡面了
最後一個功能解決方案! 謝謝Getafix,您給了我無限的可能性!
我很高興!
Excelente artículo. Bienvenido a DesdeLinux ????
如果我們有22個被阻止該怎麼辦? 大聲笑..
謝謝埃拉夫。
如果您的端口22受阻,mmmm,我們將不得不尋找一種替代方法來破解XD防火牆
最糟糕的是(假設的):VPS提供者阻止了它。
幾個小時前我剛剛進行了考試,並且對此有疑問😛
我不會這麼說:
host1 $ ssh -R 5000:本地主機:23 userhost2 @ host2
它等效於另一命令行... -L。
由於-R表示打開新連接的端口在遠程側,即ssh服務器側; -L在本地端打開一個端口,而在客戶端端打開一個端口以接收新連接。
該行的翻譯:
host1 $ ssh -R 5000:本地主機:23 userhost2 @ host2
就像這樣:在host1上,用我的用戶userhost22連接到host2的ssh服務器(端口2),並將在host5000的遠程端口2上生成的連接轉發到host23(我的本地主機)上的端口1
如果沒有,請糾正我! 😉
-
另一方面...如果服務器阻止了端口22的連接進入,即我們無法遠程連接到ssh服務器; 可以做的是; 從服務器(遠程host2系統的防火牆後面的朋友sysadmin)執行以下命令行:
host2 $ nohup ssh -fN -R 6000:本地主機:22 userhost1 @ host1
-f轉到背景
-N在遙控器上不執行任何命令
nohup防止註銷時中斷命令的執行
host1 $ ssh userhost2 @本地主機-p 6000
通過這種方式,我們從host1在端口1上生成了到localhost(同一host6000)的連接,該連接會將連接轉發到遠程系統host22的端口2,我們將在其中以用戶host2登錄。
這將允許(我沒有對其進行測試,但聽起來確實可行)在內部有一點幫助的情況下登錄到被firewal阻止的ssh服務器! 😀
我從《 The Geek Stuff》雜誌的解釋中讀到了後者
http://www.thegeekstuff.com/2013/11/reverse-ssh-tunnel/
我真的很喜歡你的出版物; 我經常閱讀它們!
問候。
你是對的。 文章中有錯誤。 重定向不等效。 命令host1 $ ssh -R 5000:localhost:23 userhost2 @ host2執行反向重定向,即,將遠程端口5000重定向到23本地,這與-L命令相反。
謝謝你的糾正。