如果你是個PuTTY重度用戶,在使用ssh連上一個遠端機器工作了好一陣子后,發現自己需要對 當前會話 上傳/下載文件,要怎樣才能簡單快捷呢?
最簡單的方式
最簡單的方法: 安裝WinSCP或者Filezilla, 啟動該程序,然后自己輸入輸入主機名、端口、用戶名、密碼登錄,然后在putty里面用pwd
命令看看當前目錄,再在WinSCP/Filezilla中跳轉到那個目錄去,再傳送文件.
WinSCP界面(commander風格.另外還支持explorer風格):
優點:上手容易,沒有額外的學習負擔
缺點:
- 繁瑣(為什么還要我再輸入一遍主機名、端口名、登錄用戶名這些?為什么不能復用當前的ssh連接呢?);
- 而且有多個PuTTY連接時,這邊要上傳,那邊要下載,還得搞明白PuTTY會話與WinSCP/Filezilla窗口的對應關系,否則一不小心就弄混了。
方法一: 用KiTTY + WinSCP/kscp
我們可以用KiTTY(已被薔,不過可以從這里下載:http://www.filehorse.com/download-kitty/, 如果需要帶有kageant/kscp的版本,可從https://chocolatey.org/packages/kitty下載 )來替代PuTTY,因為它支持 一鍵接通winscp和pscp(不再需要你輸入機器名、用戶名、密碼)。當然,你首先得裝這兩個東西(可下載便攜版本放到PATH內)
在KiTTY中,這兩個操作均是在窗口菜單上發起(點擊kitty窗口左上角圖標或者在標題欄點右鍵)
(此圖裁剪自: Putty You Go Away - Kitty Takes its Place - KossBoss
如果你只是需要上傳一個文件,可以在kitty的窗口菜單上發起Send with pscp
命令,
如果你需要下載文件,或者需要傳送多個文件甚至整個目錄,那么可以在kitty的窗口菜單上發起Start WinSCP
,kitty與WinSCP結合的優點是你不用再輸入任何信息。
優點: 從KiTTY打開WinSCP時,你不用再輸入主機名/端口/用戶名/密碼。
缺點:
- 如果你一直用得是PuTTY,那么得遷移到KiTTY,這里有遷移成本:KiTTY雖然兼容PuTTY的功能,但session保存在注冊表的不同位置(第一次啟動KiTTY時它會導入PuTTY的sessions,但后來再用PuTTY增加刪除修改的session並不自動刷新到KiTTY里面去)。所以想使用這個kitty的這個功能意味着你要承擔遷移成本(putty的生態要好一些,有不少第三方工具,但這些第三方工具能否工作於KiTTY就不一定了)
- 另外打開WinSCP后仍然需要手工轉到kitty里面的當前工作目錄,這一點上不如下面的zmodem方便
參考: pscp and WinSCP integration - KiTTY 注意:被薔
方法二:用SuperPuTTY的sftp界面
SuperPuTTY是一個PuTTY的多標簽頁管理程序,但它同時還提供了文件傳輸界面.
[] 圖
優點:
- 可以不必遷移到kitty(不過,SuperPuTTY也支持kitty)
- 功能直接提供在SuperPuTTY內,沒有安裝、配置其它應用程序的煩惱,比較省事
- 可以享受SuperPuTTY的其它郵電(比如標簽頁管理,多會話平鋪,自行定義會話,會話查找,腳本化等等)
缺點:
- 只能從session樹上發起sftp操作,如果session比較多,要針對 當前session 傳送文件,得在樹上找一陣子
- 得重新輸入密碼(不過SuperPuTTY允許你附加命令行參數給PuTTY/KiTTY,比如
-pass "foobar"
) - SuperPuTTY不支持自動導入PuTTY/KiTTY的session,而且導入時要先將原來導入的刪除(否則會造成重復)-原來我覺得這是它的設計缺陷,但后來放棄了PuTTY/KiTTY的session(只將它們用作模板,這個以后再說).
方法三:用zmodem來上傳下載文件
准備工作:
- 首先,你需要用PuTTY-nd 3.0以上版本,因為原版本的PuTTY不支持zmodem ;
- 其次,你需要在遠程主機上安裝
lrzsz
包(常用Linux發行版上都收錄了這個包)。
使用方法: 使用的時候就簡單了,
- 要下載文件的時候在Linux服務器上發起
sz somefile.zip
命令就行了(跟其它支持zmodem的客戶端不一樣的是,PuTTY-nd不會詢問保存文件的位置,會直接保存到桌面上); - 要上傳的時候,在Linux服務器上敲
rz
命令,PuTTY-nd/KiTTY就會顯示打開文件對話框,讓你選擇要上傳的文件。
優點:
- 使用起來很方便,不用打開其它程序重新建立ssh連接,也不用一層一層跳轉目錄;
- 舉一反三,掌握了這個,可在其它支持zmodem的終端上使用,比如Xshell, Mobaxterm, GNu Screen
缺點:
- 要在服務器上安裝lrzsz包,如果要管理很多台服務器,正式環境也可能不能隨意聯網(這樣第一次如何安裝
lrzsz
也挺費勁),可能會比較麻煩。 - 一次只能傳送單個文件,要傳輸一個目錄的話就得用
tar
或者zip
打包; - 另外,PuTTY-nd的實現不太穩定(有時不工作?)
KiTTY 也支持zmodem,不過啟用這個功能有點麻煩
- 在
%appdata%\KiTTY\kitty.ini
里面設置[KiTTY]zmodem=yes
- 下載Windows版本的rz.exe和sz.exe(可從http://www.9bis.net/kitty/?file=kitty_zmodem.zip (被土薔)下載或者從LePuTTY的二進制包 里面提取
win32-lrzsz-0.12.20-bin.zip
)- 打開KiTTY,在 Connection/Zmodem 里設置
sz.exe
和rz.exe
的路徑,以及下載文件的保存地址使用的時候也有點麻煩
- 每個session都要設置(除非你先在 Default Settings 里面設置了,然后新建session時會繼承)
- 下載時在linux上輸入
sz some_file
后,要在KiTTY窗口菜單上選擇 Zmodem Receive.文件被存到上面設置的目錄(不會讓你選目錄)- 上傳時要先在linux上輸入
rz
,然后再在KiTTY窗口菜單上選擇 Zmodem Upload參考:
參考:
方法四:用PuTTY Session Manager + WinSCP/Filezilla
如果你覺得zmodem不太方便/穩定,又不想從PuTTY遷移到KiTTY,那還有沒有其它辦法?好吧,這里還有一個:在PuTTY Session Manager 上發起WinSCP或者Filezilla調用。
PuTTY Session Manager這個小工具的主要是能夠列出所有的putty session(並且你可以將它們組織成樹狀),你只要雙擊節點即可調用putty打開相應的會話(它的一個優點是它支持將session按目錄組織起來)。
PuTTY Session Manager支持對接WinSCP和Filezilla,可以在右鍵菜單中對選中session發起WinSCP或者Filezilla會話,不再需要輸入主機名/端口/用戶名:
優點:不用自己建立WinSCP的session,同時還可以少輸入服務器地址、用戶名。
缺點:
- 還得自己輸入密碼,因為PuTTY不會讓你保存密碼到session里(當然,你可以在putty session或者
pageant
里面配置ssh key自動登錄。請參考我上一篇博文: 如何配置ssh免密碼登錄 - 樹上面節點多了之后,每次要先在這顆樹上找到當前putty會話到底是哪一個,這挺費勁
方法五: 用MobaXterm自帶的sftp面板
MobaXterm 在連接一個ssh會話時會自動在側邊欄顯示sftp面板,可以在這里上傳下載文件(並且支持與Windows程序的文件拖放).
優點: ssh連接時自動顯示sftp面板,並會跟隨shell的目錄變更(另外,MobaXterm也支持zmodem)
缺點:
- 得從PuTTY遷移到MobaXterm,而MobaXterm雖然有自動導入PuTTY session的功能,但免費版本僅僅支持最多12個會話(規避辦法是不用它的session面板,而是每次打開一個本地終端(local terminal),然后用它里面的ssh命令行來連接遠程服務器)
- sftp面板逐層目錄進入比較麻煩(如果你在tmux/screen里面工作)
- zmodem的支持是今年年初在v8.6新加入的功能,還不太穩定,有時候會出錯