「SSH 黑魔法」: 代理、連接埠轉寄和 shell 共用

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   sp   

在好朋友的推薦下,我看了這個視頻: 

The Black Magic Of SSH

這個視頻裡面,介紹了  ssh 的一些進階應用程式;結合工作的經曆,兩類問題會對我們平時的工作協助很大:

 

1. 兩個人怎麼看同一個終端介面

2. 怎樣用一台伺服器做連接埠轉寄

 Shell 共用

你可以把這個問題看成一個字元版的 vnc 或者 RDP,比如你的機器遇到了一個問題,但是又想看一下大牛是如何處理的;或者你需要別人手把手的想你示範一些東西,這個時候需要你和大牛同時看到同一個 shell 終端。

 

嚴格地說這個解決方式不是 ssh 自己的功勞了,安裝一個 tmux (screen) 就可以輕鬆解決這個問題。

 

簡單的步驟如下:

1. 使用者A 串連到一台 ssh 主機上,然後輸入 tmux,建立一個 session

2. 使用者B 連結到相同的主機上,輸入 tmux attach, 開啟使用者A 建立的 session

 

這樣 A、B兩個使用者現在就擁有了一個 全雙工系統 的 終端了: 兩個人的輸入、螢幕上顯示的內容完全是同步的; 當然,為了你們兩個不至於打起來,還是把它當作半雙工的使用才好。

 

Socks5 proxy

“Across the Great Wall we can reach every corner in the world.”

這是一個比較敏感的話題,我就看在你是為了訪問 google scholarship 和 python.org 的份上,繼續往下寫好了。

很多人都會有一個 vps 來搭建個人的 blog,這樣可以使用 ssh 來很方便的搭起一個 socks5 proxy。

 

在終端裡輸入

man ssh

找到其中的“-D” 部分, 你可以看到以下解釋:它會在主機上佔用指定的連接埠,然後任何一個串連到它的連結,都會通過主機轉寄出去,並且目前只支援 socks4、sucks5 協議。

所以你可以這樣串連一台伺服器:

ssh -D 8888 [email protected]

然後你就擁有了一個私人的 socks5 proxy, 地址就是你主機的地址,連接埠就是 -D 後面的參數了。

 

連接埠轉寄

就像 640k 記憶體就夠一台電腦足夠使用一樣,IPV4 也是足夠使用的;所以我們有了 NAT 這個東西。隨後來了兩類問題:

 

1. 我們公司有一台對外的機器,和N台對內的機器,怎樣讓其他使用者,可以直接存取內網機器的某個/些連接埠

2. 我有一台公網的主機,家裡有一台機器(在移動或者長寬的後面),怎樣讓別人能連到我家裡的電腦上去

 把原生請求轉寄到遠程主機: SSH -L

 L 就是 local 的意思,使用 -L 參數,可以把發往原生請求轉寄到其他地址上面去。

比如我廠有兩台機器,一台機座O,是可以通過外網訪問的;另外一台記作 I,是躲在防火牆後面,但是 O I 之間,是暢通無阻的。這時候你在I上運行了一個服務,想讓大家可以訪問,又沒有許可權變更管理員對防火牆的設定,那麼 -L 就可以拯救你了: 在O與I之間,做一個連接埠轉寄; 凡是發往 O:port 的請求,都會被轉寄到 I:port_1 上面去。

 

-L 後面支援三個參數:

-L [bind_address:]port:host:hostport

 

port: 本地連接埠

host: 把發往本地的連接埠,轉寄到哪台主機上

hostport: 轉寄的連接埠號碼。

 

如果我們想把發往 ip1 8000連接埠的請求,全部轉寄到 ip2 80連接埠上面去,可以在 ip1 的主機上,建立這樣一個串連:

ssh -L 8000:ip2:80 [email protected]

事情就這樣成了!

 

如果你捨得多花些心思,你會發現, ssh 後面的hostname,不一定需要是 ip1,也是可以轉寄的

 

把發往主機的請求轉寄到本地:SSH -R

如果你瞭解了 -L 的使用,那麼 -R 自然也很容易理解了,就是反過來,把發往主機的請求,轉寄回本地;這個方式很適用於處在各個內網的使用者。

 

我的朋友 S 小姐,公司最近給她發了一個 rMBP,用來為公司錄製的視頻進行格式轉換; 顯然是 ffmpeg 大顯身手的時候。其實我說的是我,因為她不太會用cli來使用 ffmpeg。不過她很不幸的選擇了長寬,外面的連結,無論如何也不能主動串連過去;想在QQ上介紹怎麼 ffmpeg 怎麼使用也是不太容易的事情。如果能夠直接 ssh 到她的機器上,就可以直接操作了。這個時候,就用到 -S 來把遠端資料向本地轉寄了。

 

-R 的參數,和 -L 類似

 

-R [bind_address:]port:host:hostport

會把發往主機 port 連接埠的請求,轉寄到 host的 hostport 連接埠上,所以如果你想讓其他人訪問你的電腦,可以這麼做:

ssh -R 8000:127.0.0.1:80 [email protected]

這個時候,任何發往 hostname:8000 的請求,都會被轉寄到 127.0.0.1:80 上來。

「SSH 黑魔法」: 代理、連接埠轉寄和 shell 共用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.