SSH-PuTTY–詳細使用教程(二)
最近做SSH代理,在網上搜尋了一些教程,在Putty的使用方面,下面的教程堪稱最全面詳細了,也轉來供有需要的朋友的參考,自己也做一份記錄保存以便日後參考。全文教程分四個部份發布,這是第二部分。 原文摘自:樂趣思 Windows下SSH客服端PuTTY–詳細使用教程(二)
窗口保存的輸出有點少,前面的都看不到了
執行了一個命令,輸出了好多東西,但是默認的配置下,PuTTY只保存了最後200行的內容,滿足不了我們的需求
還是在標題欄上點右鍵選擇 Change settings…,在配置窗口的左邊選擇 Window,修改右邊的 Lines of scrollback,改大點,比如 20000、80000的

在上面的 Set the size of the window 里設置的是窗口顯示的行數和列數,默認是 24 行、80 列,根據自己的需要來修改吧。
When window is resized 這個選項配置的是,當窗口大小發生改變時該採取什麼動作。
Change the number of rows and columns(這個是默認的,改變窗口大小時,自動修改行數和列數)
Change the size of the font(這個是根據窗口的大小來修改字體的大小,窗口最大化的時候,字都是很大的)
Change font size only when maximised(只有在窗口最大化的時候才改變字體大小)
Forbid resizing completely(完全禁止改變窗口大小,一了百了)
在現代的 Unix/Linux 主機上,默認選項已經不存在任何問題了。如果是 Solaris 8 這樣的老式 Unix 上最好用第2或第4個選項。
第3個選項嘛,要求你的螢幕不是寬屏的,選中這個選項以後,大家可以先把窗口往窄的縮一下,然後最大化窗口,哈哈,滿足一下不是寬屏的虛榮心。
順便說一下,在 PuTTY 中的前後翻頁,與 Linux 終端一樣,用 Shift PageUp/PageDown 來上下翻頁,而 Ctrl PageUp/PageDown 則是一行一行的。
新建一個會話時,還有些東西再啰嗦一下
前面把如何用 PuTTY 登錄一台主機到註銷的過程聊了一遍,但是在新建會話時還是有些東西需要再啰嗦一下的。
保持連接,不要自動斷開
在 Connection 裡面有個 Seconds between keepaliaves,這裡就是每間隔指定的秒數,就給伺服器發送一個空的數據包,來保持連接。以免登錄的主機那邊在長時間沒接到數據後,會自動斷開 SSH 的連接。
默認輸入 0 是禁用保持連接,在這裡我習慣的設置了 10。
下面的那兩個複選框都保持默認選中吧。

自動登錄用戶
在 Connection-〉Data 裡面有個 Auto-login username,可以指定默認的登錄用戶。如果每次登錄主機都是用同一個用戶,不妨在這裡設置一下。SSH、Telnet、Rlogin 這三種協議都支持,但不是所有的 Telnet 伺服器支持自動登錄用戶

自動設置環境變數
還是前面的那個界面,下面有個 Environment variables,在 Variable 輸入環境變數的名稱,Value里設置上環境變數的值,登錄主機後就會自動設置上,但是這個不一定能用,有些主機為了安全,可能會禁用這個特性,一旦登錄 就會收到這樣一個錯誤提示:
Server refused to set environment variables
設置代理伺服器
這個經常用到,設置方法大同小異,注意選擇好 Proxy type(代理伺服器的類型)就可以了。
代理伺服器的地址填寫到 Proxy hostname 這裡,Port 就是代理服務的連線埠(HTTP代理常用連線埠有 3128、8080,Socks5代理常用連線埠有 1080)
Exclude hosts/IPs 這裡是填寫排除的主機地址和IP,有些地址不需要代理,就在這裡填寫。
有些代理需要認證,用戶名填寫到 Username,密碼則填寫到下面的 Password。

自動執行一個命令
在 Connection-〉SSH 里有個 Remote command,在這裡面填寫上遠程伺服器上的某個命令,比如:df,登錄後就會自動執行。
我們在 Unix 上用 ssh 登錄主機時用的命令 ssh,在 ssh 的最後面加上遠程主機上的命令,就跟這個一樣。
但是……,先別著急,一旦設置上這個選項,你會發現在登錄成功後,窗口一下就關閉了,嘿,怎麼啦?什麼也沒看見。
因為命令執行完畢的同時,本次 SSH 登錄連接也隨之關閉。

你可以把遠程自動執行的命令修改成 sleep 10,然後重新登錄,再看看效果。
登錄成功後,沒有出現命令提示符,10秒鐘後,窗口自動關閉。這也驗証了剛才我說的,命令執行完畢後,SSH 連接自動斷開。
冰雪聰明的你一定會想到,如果每次登錄主機,都是要重新啟動一下 tomcat,那這裡就可以填寫上這樣的命令:
export CATALINA_HOME="~/apache-tomcat-5.5.17";export JAVA_HOME="~/jdk1.5.0_07";export PATH=$JAVA_HOME/bin;$PATH ; cd $CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail -f $CATALINA_HOME/logs/catalina.out
(上面的命令是一行的哦)
先自動設置一下環境變數(前面有提到,伺服器可能會禁用自動設置環境變數,為了保險起見,在這裡設置了一下),然後進入 tomcat 的 bin 目錄,用 shutdown.sh 停止 tomcat,然後再 startup.sh 啟動 tomcat,最後 tail 命令持續觀察 tomcat 的日誌輸出,不想看了,就直接 Ctrl C 就可以終止 SSH 的會話了。
哈哈,是不是很方便?
不過前面提到的命令 sleep 10,只是建立了 SSH 連接,然後 10 秒鐘後自動斷開。是不是覺得很無聊沒什麼用途啊?其實這個命令配合後面提到的 Tunnels(隧道),可以自動保持隧道一定時間的開放,如果指定時間內(在這裡就是 10 秒鐘)隧道沒有被使用,就自動關閉 SSH 連接和隧道。
如果選中了 Don't start a shell or command at all 就禁用了自動執行命令這一個特性,這個主要是配合 Tunnels (隧道)來使用的。因為有時候,我們只需要利用隧道建立一個 VPN,而並不需要登錄上去執行命令。用這個方法建立好隧道以後,就一直開放了,除非自己手工關閉。

嗯,還有個問題哦,如果一次要執行的命令很多,該怎麼辦呢?嗯,給 PuTTY 用 -m 選項指定一個包含遠程主機上執行的命令的純文字檔案。不過以後還會說到 Plink,就是專門做這個用的,慢慢來慢慢來。
數據自動壓縮傳輸,變相的提高傳輸速率
還是前面的那個界面,Protocol options 裡面有個 Enable compression,這個選項的意思就是傳輸時壓縮數據,在連接速度不變的情況下,變相的提高了傳輸速率。一般的 SSH 伺服器都會允許這個選項的,所以還是選中好了。

無需口令登錄
在 Connection-〉SSH-〉Auth 這裡面有兩個需要了解的,以後在講到 PuTTYGEN 和 Pagent 時會詳細介紹的。
一個是 Allow agent forwarding,作用是允許私鑰代理的轉發。
另外一個是最下面的 Private key file for authentication,選擇私鑰認證文件。
這兩個可以讓你用 SSH 登錄不用輸入主機口令,但是私鑰的口令還是需要輸入的,如果使用了私鑰代理 Pagent ,私鑰口令也可以省略。再配合前面提到的自動指定用戶名登錄,可以實現自動登錄主機。登錄到主機上以後,用 SSH 登錄另外一個同樣配置了相同的私鑰認證的主機,也可以不用再次輸入口令。
這些可以大大減輕了我們的重複工作,不用單調枯燥的輸入用戶名和口令,但是這樣使用有個後遺症就是如果主機密碼沒有在另外一個地方記錄下來的話,這個密碼很快會忘記的,好處嘛,密碼可以設置的很長很變態 XD。

X11 轉發能夠讓你在 Windows 上使用 Linux 的程序
這裡很簡單,選中 Enable X11 forwarding 後登錄主機,記得在我們本地運行 X 服務端程序(比如:免費好用的 Xming)。

然後在控制台直接輸入 X 環境下運行的程序,比如:xlogo,我們就可以看到 Linux 上的GUI界面的程序在Windows桌面上打開了。

運行個複雜的,比如 gnome-session,這個是 GNOME 的啟動命令,如果想打開 KDE 就是 startkde

這樣跟在本地使用 X Window 幾乎是一樣的了,而且還是運行在 Windows 的桌面上呢,騙騙小 mm 還是不錯的。或許你會問這樣用跟 vnc 那還不一樣了?答案是,不一樣。如果網路環境不好,還是用vnc吧,否則遲鈍的圖形響應速度會讓你抓狂的。
打開了 GNOME 桌面,怎麼關閉呢?點菜單的註銷吧。如果你點了關機,這可關不了你的Windows,關的是遠程主機。
用 SSH Tunnels(SSH 隧道),突破防火牆
哇哦,突破防火牆!是不是忽然有了做駭客的感覺呢?呀!子彈,我躲——,身子往後仰,繼續閃……,噢,肚皮被子彈蹭了一下。
簡單的說一下,SSH 協議能夠通過已經建立好的 SSH 加密鏈路來轉發任意的網路連接,從而避免了網路中的明文傳輸,也就無法用一些 Sniffer 工具嗅探到我們的隱秘信息了。
先說一下大致的使用過程,登錄到主機上以後,就可以建立好一個 SSH 隧道,這時在你的機器本地會開放一個連線埠,通過本地的這個連線埠訪問,就相當於在主機上去直接訪問。很像代理伺服器吧,如果隧道另一端的連線埠是動態 的,SSH 隧道就是一個代理了,SSH 隧道的意思大致就是這個。通過 SSH 隧道,我們可以保證從我們這一段到主機那一端是安全的,不會被監聽到。
說了這麼多,實際演練演練就知道了。在 PuTTY 的 Connection-〉SSH-〉Tunnels 這裡就是配置 SSH 隧道的。
Add new forwarded port 這裡就是添加隧道轉發連線埠的,其中 Source port 是隧道的源連線埠,也就是隧道的入口,連接隧道時要連接這個連線埠。Destination 這裡是目的地,隧道的出口,輸入的格式是: server:port。
還要說明的一點是 SSH 隧道是有方向的,這個方向是由下面的單選按鈕 Local/Remote/Dynamic 來決定的。如果下面的單選按鈕選中的是 Local,那麼 Destination 這裡填寫的目標是相對於遠程主機而言,而非你的機器。這樣的隧道可以稱之為正向隧道,隧道的入口是在你的本地,出口在遠程主機那一端。如果單選按鈕選中的 是 Remote,那麼目標地址就是相對與你的機器而言,而非遠程主機。這樣的隧道稱之為反向隧道,隧道的入口是遠程主機那一端,隧道的出口則是你的本地機 器。這與 Local 選項是相反的。而最後一個 Dynamic 則不用指明 Destination 目標地址,也就是說目標地址是動態的了,連入隧道時可以隨意指定目標地址,而不像 Local/Remote 指明的固定目標地址,所以這樣的隧道就成了變相的加密 socks5 代理伺服器了。
看明白了么?是不是會有些糊塗?後面我會舉個例子來詳細說說的。

開始演練,我們現在建立一條到遠程主機 guantouping 上連線埠 7001 的隧道,在 guantouping 上可以用 nc -l -p 7001 localhost 這條命令建立一個監聽本地到連線埠 7001 的連接,這樣確保無法從其他機器訪問這台主機的連線埠,只能在 guantouping 這台主機上用 telnet localhost 7001 來連接。現在我的機器 IP 是 192.168.6.25,如果直接用命令 telnet guantouping 7001 訪問的話,那麼在主機 guantouping 上會看到這樣的提示:
[taylor@guantouping taylor]$ nc -l -p 7001 localhost
invalid connection to [192.168.6.200] from (UNKNOWN) [192.168.6.25] 1926
在這個配置面板上, Source port 上填寫 8080,也就是我們要通過本地的 8080 連線埠來進入 SSH 隧道, Destination 這裡填上 127.0.0.1:7001,就表示被登錄的主機 guantouping 訪問該主機本地的 127.0.0.1:7001 這個連線埠。正常登錄到主機 guantouping 以後,SSH 隧道就建立好了。在我的機器 192.168.6.25 上輸入命令 telnet localhost 8080,輸入一些東西,就會在 guantouping 上看到有響應。在這裡我用的是 nc,看起來方便一點,telnet 也是一樣的。

這就是正向 SSH 隧道的一個例子,大家實地操作幾次也就會明白了。最上面有個複選框是「Local ports accept connections from other hosts」,這個選項的作用是允許其他主機連接你機器上的隧道入口,默認情況下建立好隧道以後,只允許本地鏈接。只有選中這個複選框才允許其他主機連接 你的本地隧道入口。
象特洛伊木馬一樣建立一條 SSH 反向隧道
下面要說的就是選中單選按鈕 Remote 後建立的反向 SSH 隧道,這樣的隧道做什麼用呢?一般防火牆都是允許從內往外鏈接,而不允許從外到內的鏈接,除非在防火牆上做好nat或連線埠轉發。現在,你在防火牆的內部, 但是又想讓外面的人鏈接到你的機器上。防火牆厚厚的城門緊閉,外面的人進不來,只有你能從裡面打開這扇防護嚴密的大門,就像一個特洛伊木馬一樣,你主動連 接出去建立一個反向的 SSH 隧道,然後外面的人就可以通過這個反向的 SSH 隧道輕鬆突破防火牆鏈接到的你的本地機器。看下面這個圖:

在 Source port 這裡填寫 8080,也就是隧道的入口是連線埠8080,Destination 這裡填寫 localhost:7001,也就是隧道的出口是本地的 7001 連線埠,下面的單選按鈕要選中 Remote,表示建立的隧道是個反向隧道,填寫完畢別忘記點 Add 按鈕,在上面就可以看到顯示的是 R8080 localhost:7001。成功登錄遠程主機 guantouping 後,反向隧道就建立好了。在遠程主機 guantouping 上輸入命令 telnet localhost 8080 就可以連接到你的本地連線埠7001。

哈哈,這樣一個特洛伊木馬般的反向 SSH 隧道就建立完畢了。我們在遠程主機上連接 8080 連線埠,其實就連接到了我們本地機器的7001 連線埠了。上面共有兩個複選框,我們提到了一個,已經說了,選中以後就允許其他機器連接隧道入口了。那第二個「Remote ports do the same (SSH-2 only)」,則是給反向隧道使用的,也就是說遠程主機的那個反響隧道入口也做同樣的事情,也就是允許其他機器連接遠程主機上的反向隧道入口,不過一般情 況下這個選項都不會起作用的 ^_^。
把 PuTTY 作為一個安全的代理伺服器來使用
這個簡單,在 Source port 那裡填寫上 1080,Destination 這裡空下不填,選中下面的 Dynamic,最後別忘了點 Add 按鈕。

登錄遠程主機後,一個代理伺服器就建立好了,這個代理伺服器的地址就是 localhost:1080,還是加密的哦。據說國外某著名的主機供應商就提供遠程的 SSH 鏈接,通過這個方法我們就建立了一個加密的 socks5 代理,可以輕鬆繞過***去擁抱 ***。
設置 PuTTY 的默認設置
每次登錄主機,無一例外的修改字體,修改字符集,修改窗口的大小,指定私鑰文件,允許 X11 轉發,……
幾台主機還好說,幾十個上百個主機這樣三天兩頭的設置也會讓唐僧煩了的。
選中一個先前配置好的會話,點 Load 按鈕。

然後修改Saved Sessions會話名稱 和 Host Name 這裡的主機地址,點Save

如果在 Saved Sessions 這裡和上面的 Host Name 清空,點 Save 按鈕,就可以把設置保存為默認設置。
原文標題:SSH-PuTTY–詳細使用教程(二) - 美博園
美博園文章均為「原創 - 首發」,請尊重辛勞撰寫,轉載請以上面完整鏈接註明來源!
軟體著作權歸原作者!個別轉載文,本站會註明為轉載。
這裡是你留言評論的地方