眾所周知在Windows系統和Linux類系統的最大區別就在于他的非開源性,因此在Windows下我們傳輸文件,共享資源主要通過FTP協議來實現,和以前的TFTP協議相比FTP提供了必要的安全保證措施,然而對于一些要求網絡安全級別比較高,需要嚴格防范傳輸數據被監聽工具竊取的情況來說,FTP協議就無法勝任了,這時我們應該尋找更加安全的傳輸協議來保證服務器的安全。今天筆者就為各位IT168的讀者介紹在Windows下如何通過sftp打造安全傳輸。
一、什么是sftp?
一般來說兩臺機器間的文件傳輸,除了常用的ftp以外,還可以通過scp/sftp協議(就是本文介紹的sftp)進行。下面我們就來看看sftp協議與ftp協議之間的差別。
(1)和ftp不同的是sftp/scp傳輸協議默認是采用加密方式來傳輸數據的,scp/sftp確保傳輸的一切數據都是加密的。而ftp一般來說允許明文傳輸,當然現在也有帶SSL的加密ftp,有些服務器軟件也可以設置成“只允許加密連接”,但是畢竟不是默認設置需要我們手工調整,而且很多用戶都會忽略這個設置。
(2)普通ftp僅使用端口21作為命令傳輸。由服務器和客戶端協商另外一個隨機端口來進行數據傳送。在pasv模式下,服務器端需要偵聽另一個口。假如服務器在路由器或者防火墻后面,端口映射會比較麻煩,因為無法提前知道數據端口編號,無法映射。(現在的ftp服務器大都支持限制數據端口隨機取值范圍,一定程度上解決這個問題,但仍然要映射21號以及一個數據端口范圍,還有些服務器通過UPnP協議與路由器協商動態映射,但比較少見)
(3)當你的網絡中還有一些unix系統的機器時,在它們上面自帶了scp等客戶端,不用再安裝其它軟件來實現傳輸目的。
(4)scp/sftp屬于開源協議,我們可以免費使用不像FTP那樣使用上存在安全或版權問題。所有scp/sftp傳輸軟件(服務器端和客戶端)均免費并開源,方便我們開發各種擴展插件和應用組件。
小提示:當然在提供安全傳輸的前提下sftp還是存在一些不足的,例如他的帳號訪問權限是嚴格遵照系統用戶實現的,只有將該帳戶添加為操作系統某用戶才能夠保證其可以正常登錄sftp服務器。
二、下載所需程序:
本文介紹的所有工具都不是誕生于windows系統的,他們是從unix移植過來的,配置方式仍然使用了conf文件的方式,幾乎沒有圖形界面。而且這些配置文件一般用unix換行符,所以建議各位讀者使用ultraedit等工具而不是notepad來編輯,一是確保能正常顯示,二是確保保存時不會破壞它的格式導致服務程序無法讀取。
服務器端我們使用openssh,它自帶了cygwin環境以及scp/sftp的服務器(sftp是ssh的一個“子服務”,在ssh通道中使用某個命令在需要時激活)。
打開瀏覽器訪問下載SSHWindows-Installer,在該頁面中我們下載SSHWindows-Installer, 3.8p1-1 20040709 Build這個程序即可。

而客戶端我們則采用的是winscp軟件,他是一款圖形化界面的軟件,界面操作類似于ftp軟件,很好上手。我們到
http://sourceforge.net/project/showfiles.php?group_id=85589這個地址下載WinSCP 3.8.2.(如圖2)

三、配置sftp服務端:
sftp服務端的安裝與配置還是比較簡單的,通過幾條命令就可以開啟sftp服務。
第一步:將之前下載的sftp服務端解壓縮,然后直接運行主程序。點“NEXT”按鈕進行下面的操作。(如圖3)

第二步:在許可協議窗口處填寫“同意”并點“下一步”按鈕繼續。(如圖4)

第三步:在接下來的配置窗口中選擇要安裝的組件,從界面中我們可以看到包括client(客戶端)與server(服務器端),實際上我們只需要服務器端,而客戶端我們使用之前下載的WinSCP 3.8.2即可。選擇相應的服務器端組件后點“下一步”按鈕繼續。(如圖5)

第四步:選擇程序安裝的路徑,默認是c:\program files\openssh,建議大家不修改這個缺省地址。(如圖6)

第五步:默認情況下openssh將添加一個應用程序到開始程序中,名字叫做openssh for windows.(如圖7)

第六步:安裝的最后openssh會自動建立ssh安全加密key,保證SSH傳輸過程中的安全可靠。(如圖8)

第七步:完成所有安裝工作,點“完成”按鈕回到桌面。(如圖9)

第八步:接下來就要啟動該服務了,我們通過“開始->運行->輸入CMD后回車”進入到命令提示窗口,然后通過cd命令定位到c:\programfiles\openssh\bin目錄。(如圖10)

第九步:依次執行mkgroup -l >> ……\etc\group mkpasswd -l >> ……\etc\passwd命令,這樣你目前windows本地帳戶中的用戶就都可以登錄該sftp服務器了,他們自對文件目錄的訪問權限和NTFS權限一致。此步驟相當于FTP中的建立訪問帳號。(如圖11)

第十步:添加完各個訪問帳戶后我們可以到c:\program files\openssh\etc目錄中來查看group和passwd兩個文件的內容,當然這些內容是經過了加密的。(如圖12)

這兩個文件
存儲的都是帳戶相關信息,正如前面所說他們是從unix移植過來的,配置方式仍然使用了conf文件的方式,幾乎沒有圖形界面。而且這些配置文件一般用unix 換行符,建議各位IT168讀者使用ultraedit等工具而不是notepad來編輯,一是確保能正常顯示,二是確保保存時不會破壞它的格式導致服務程序無法讀取。(如圖13)

第十一步:最后在剛才進入的c:\program files\openssh\bin目錄下執行net start opensshd命令,這將啟動opensshd服務,我們就可以開始訪問了。(如圖14)

小提示:一般sftp用默認的22端口發布服務就行。如果你有特殊的原因要把這個端口改掉,請編輯C:\ProgramFiles\OpenSSH\ etc\sshd_config文件,把這一行改成你要的端口,比如8029,設置完畢后需要重啟openssh服務(任何配置改動都需要重啟服務)。
至此服務器端的配置完成,下面我們來介紹如何在客戶端上訪問建立的sftp服務。
小提示:如果以后要繼續添加訪問帳戶的話,首先在windows中加上這個用戶,例如我們以名為softer的帳戶為例,設置密碼,確保不要選中“下次登錄必須改密碼”。這個用戶的權限和用戶組由你來決定。然后進入c:\program files\openssh\bin目錄,執行mkpassword -l -u softer >> ……\etc\passwd命令即可將剛才添加的softer帳戶添加到訪問權限中。說白了指令加-u是加單獨一個帳戶,沒有-u參數的話將把當前系統中所有帳戶添加到容許訪問sftp服務器的帳戶列表中。
四、配置sftp客戶端:
配置sftp客戶端就更加簡單了,由于之前我們已經下載了WinSCP 3.8.2,所以直接運行該程序即可出現登錄配置界面。(如圖15)
790)
我們根據實際填寫sftp服務器的地址和訪問帳戶信息,協議方面保持默認的sftp (allow scp fallback)即可,完成設置后點login登錄按鈕后會出現“使用提示”信息,不用理會繼續即可。(如圖16)
790)
登錄進入服務器后我們會看到界面顯示和我們之前熟悉的ftp登錄工具一樣,特別是和flashfxp登錄FTP服務器類似。右邊是我們看到的sftp服務器發布的目錄。(如圖17)

當然這個默認發布目錄可能不是我們希望看到的,如果想要訪問你的C盤,我們可以先把焦點放在服務器那半邊窗口,然后按ctrl+o,輸入/cygdrive/c并回車,這樣就可以把這個目錄加到winscp的書簽或者作為登錄時的默認目錄。(如圖18)

五、總結:
當我們要關閉sftp服務時只需要在服務器端對應目錄執行net stop opensshd指令即可,這樣對應服務將自動關閉。(如圖19)另外如果在客戶端上無法訪問sftp服務器的話,很可能是因為XP系統自帶
防火墻搗亂,我們關閉防火墻或者手動在windows防火墻配置中允許c:\Program Files\OpenSSH\usr\sbin\sshd.exe程序的執行和對網絡的訪問即可。
該文章在 2011/2/28 0:09:51 編輯過