1. 程式人生 > >PuTTY使用者手冊(十)

PuTTY使用者手冊(十)

第6章:使用PSFTP安全傳輸檔案

PSFTP, PuTTY SFTP客戶端,是一種使用SSH連線在計算機之間安全地傳輸檔案的工具。

PSFTP與PSCP的區別在於:

PSCP應該可以在幾乎所有SSH伺服器上工作。
PSFTP使用新的SFTP協議,這只是SSH-2的一個特性。
(如果可以,PSCP也將使用此協議,但如果不能,則可以使用與SSH-1等效的協議。)
PSFTP允許您執行一個互動式檔案傳輸會話,非常類似於Windows ftp程式。
您可以列出目錄的內容,瀏覽檔案系統,發出多個get和put命令,最後登出。
相比之下,PSCP被設計成執行單個檔案傳輸操作並立即終止。

6.1開始PSFTP

啟動PSFTP的通常方法是從命令提示符開始,非常類似於PSCP。
要做到這一點,它需要位於您的路徑上或當前目錄中。
要將包含PSFTP的目錄新增到路徑環境變數中,請在控制檯視窗中鍵入:

set PATH=C:\path\to\putty\directory;%PATH%

然而,與PSCP不同,PSFTP沒有複雜的命令列語法;
您只需指定主機名,也許還可以指定使用者名稱:

psftp server.example.com
或者

psftp [email protected]
或者,如果您只輸入psftp本身(或者雙擊Windows GUI中的psftp圖示),您將看到psftp提示符,並且有一條訊息告訴您psftp沒有連線到任何伺服器:

C:>psftp
psftp: no hostname specified; use “open host.name” to connect
psftp>

此時,您可以鍵入open server.example.com或open [email protected]來啟動會話。

PSFTP接受PuTTY工具支援的所有常規命令列選項,除了在檔案傳輸實用程式中沒有意義的選項。
有關這些選項的描述,請參見第3.8.3節。
(PSFTP不支援的部分標記清楚。)

PSFTP還支援它自己的一些選項。
下面幾節描述PSFTP的特定命令列選項。

6.1.1 -b:指定一個包含批處理命令的檔案

在正常操作中,PSFTP是一個互動式程式,它顯示命令列並接受鍵盤上的命令。

如果您需要使用PSFTP執行自動化任務,您可能更喜歡預先指定一組命令並自動執行它們。
-b選項允許您這樣做。
將其與包含批處理命令的檔名一起使用。
例如,您可以建立一個名為myscript.src的檔案。
包含這樣的行:

cd /home/ftp/users/jeff
del jam-old.tar.gz
ren jam.tar.gz jam-old.tar.gz
put jam.tar.gz
chmod a+r jam.tar.gz

然後你可以通過輸入如下命令執行這個指令碼:
psftp [email protected] -b myscript.scr
當您以這種方式執行批處理指令碼時,如果任何命令未能成功完成,PSFTP將中止該指令碼。
要更改此行為,可以新增-be選項(第6.1.3節)。

PSFTP將在完成批處理指令碼的執行後終止。

6.1.2 -bc:在批處理命令執行時顯示它們

bc選項在處理用-b指定的批處理指令碼時更改PSFTP顯示的內容。
使用-bc選項,PSFTP將顯示提示和命令,就像在鍵盤上輸入命令一樣。
所以會看到這個

C:\>psftp [email protected] -b batchfile
Sent username "fred"
Remote working directory is /home/fred
Listing directory /home/fred/lib
drwxrwsr-x    4 fred     fred         1024 Sep  6 10:42 .
drwxr-sr-x   25 fred     fred         2048 Dec 14 09:36 ..
drwxrwsr-x    3 fred     fred         1024 Apr 17  2000 jed
lrwxrwxrwx    1 fred     fred           24 Apr 17  2000 timber
drwxrwsr-x    2 fred     fred         1024 Mar 13  2000 trn

或者可能是這個:

C:\>psftp [email protected] -bc -b batchfile
Sent username "fred"
Remote working directory is /home/fred
psftp> dir lib
Listing directory /home/fred/lib
drwxrwsr-x    4 fred     fred         1024 Sep  6 10:42 .
drwxr-sr-x   25 fred     fred         2048 Dec 14 09:36 ..
drwxrwsr-x    3 fred     fred         1024 Apr 17  2000 jed
lrwxrwxrwx    1 fred     fred           24 Apr 17  2000 timber
drwxrwsr-x    2 fred     fred         1024 Mar 13  2000 trn
psftp> quit
6.1.3 -be:繼續對錯誤進行批處理

在執行批處理檔案時,此附加選項會導致PSFTP繼續處理,即使命令未能成功完成。

例如,如果您想刪除一個檔案,並且不關心它是否已經不存在,那麼您可能希望發生這種情況。

6.1.4 -batch:避免互動式提示

如果使用-batch選項,PSFTP在建立連線時永遠不會給出互動式提示。
例如,如果伺服器的主機鍵無效(請參見2.2節),那麼連線將被簡單地放棄,而不是詢問下一步要做什麼。

這可能有助於PSFTP在自動指令碼中使用時的行為:使用-batch,如果在連線時出現問題,批處理作業將失敗,而不是掛起。

6.2執行PSFTP

啟動PSFTP會話後,您將看到一個PSFTP >提示符。
現在可以鍵入命令來執行檔案傳輸函式。
本節列出所有可用的命令。

任何以#開頭的行都將被視為註釋並被忽略。

6.2.1 PSFTP命令的一般引用規則

PSFTP命令直譯器將大多數PSFTP命令視為單詞序列,由空格分隔。
例如,命令ren oldfilename newfilename分成三個單詞:ren(命令名)、oldfilename(要重新命名的檔案的名稱)和newfilename(要給檔案的新名稱)。

有時您需要指定包含空格的檔名。
為了做到這一點,您可以在檔名周圍加上雙引號。
這同樣適用於本地檔名和遠端檔名:

psftp> get “spacey file name.txt” “save it under this name.txt”

雙引號本身不會作為檔名的一部分出現;
它們被PSFTP刪除,唯一的作用是阻止它們內部的空格充當單詞分隔符。

如果需要使用雙引號(在某些遠端系統上,比如Unix,允許在檔名中使用雙引號),可以通過將其加倍來實現。
這在雙引號內外都可以工作。
例如,這個命令

psftp> ren ““this”” “a file with ““quotes”” in it”

將獲取當前名稱為“this”(開頭和結尾使用雙引號字元)的檔案,並將其重新命名為名稱中包含“quotes”的檔案。

(PSFTP引用規則的一個例外是!命令,它直接將命令列傳遞給Windows,而不將其拆分為單詞。見6.2.19)

6.2.2 PSFTP中的萬用字元

PSFTP中的幾個命令支援“萬用字元”來選擇多個檔案。

對於本地檔案規範(例如要放置的第一個引數),使用本地作業系統的萬用字元規則。
例如,在Windows上執行的PSFTP可能需要使用*.*
Unix上的PSFTP需要*.

對於遠端檔案規範(例如要獲取的第一個引數),PSFTP使用標準萬用字元語法(類似於POSIX萬用字元):

  • * 匹配任意字元序列(包括零長度序列)。
  • ? 只匹配一個字元。
  • [abc]只匹配一個字元,可以是a、b或c。
    匹配從a到z範圍內的任何字元。

(^ abc)匹配一個字元,不是一個b或c。

特殊情況:[-a]匹配一個連字元(-)或a;
所有其他字元(^ - a)匹配。
()匹配文字插入符號()或。

  • (反斜槓)前面的任何一個字元(或其本身)刪除該字元的特殊含義。

檔名的前導句點(.)不像在某些Unix上下文中那樣被特殊處理;
get *將獲取所有檔案,不管它們是否以前導週期開始。

6.2.3 open命令:啟動一個會話

如果您通過在GUI中雙擊或僅在命令列輸入PSFTP啟動PSFTP,那麼在發出任何其他命令(幫助和退出命令除外)之前,您將需要開啟到SFTP伺服器的連線。

要建立連線,輸入open host.name,或者如果需要指定使用者名稱,也可以輸入open [email protected]
您還可以選擇指定一個埠:開啟[email protected] 22。

發出此命令後,即使命令失敗(例如,輸入錯誤的主機名或連線超時),也無法再次發出此命令。
因此,如果連線沒有成功開啟,PSFTP將立即終止。

6.2.4quit命令:結束會話

當您完成會話後,輸入命令quit關閉連線,終止PSFTP並返回命令列(或者如果是從GUI啟動PSFTP控制檯視窗,則關閉該視窗)。

您還可以使用bye和exit命令,它們的效果完全相同。

6.2.5close命令:關閉連線

如果您只想關閉網路連線,但又想讓PSFTP繼續執行,那麼可以使用close命令。
然後可以使用open命令開啟一個新連線。

6.2.6help命令:獲得快速線上幫助

如果您鍵入幫助,PSFTP將給出可用命令的簡短列表。

如果您使用命令名輸入help(例如,help get),那麼PSFTP將對該命令提供一小段幫助。

6.2.7 cd和pwd命令:更改遠端工作目錄

PSFTP在伺服器上維護“工作目錄”的概念。
這是其他命令將操作的預設目錄。
例如,如果鍵入get檔名。
然後PSFTP將查詢檔名。
在伺服器上的遠端工作目錄中的dat。

要更改遠端工作目錄,請使用cd命令。
如果不提供引數,cd將返回伺服器上的主目錄(更準確地說,是連線開始時所在的遠端目錄)。

要顯示當前遠端工作目錄,輸入pwd。

6.2.8 lcd和lpwd命令:改變本地工作目錄

除了在遠端伺服器上有一個工作目錄外,PSFTP在您的本地機器上也有一個工作目錄(就像任何其他Windows程序一樣)。
這是其他命令將操作的預設本地目錄。
例如,如果鍵入get檔名。
然後PSFTP將結果檔案儲存為檔名。
在本地工作目錄中的dat。

要更改本地工作目錄,請使用lcd命令。
要顯示當前的本地工作目錄,輸入lpwd。

6.2.9 get命令:從伺服器獲取一個檔案

要從伺服器下載檔案並將其儲存在本地PC上,可以使用get命令。

最簡單的形式,你只需要用一個檔名:

get myfile.dat
如果您想以不同的名稱在本地儲存檔案,請在遠端檔名後面指定本地檔名:

get myfile.dat newname.dat
這將獲取伺服器上名為myfile的檔案。
但是將它儲存到您的本地機器的名稱newname.dat。

要遞迴地獲取整個目錄,可以使用-r選項:

get - r mydir
get -r mydir newname

如果要獲取名稱以連字元開頭的檔案,可能必須使用—special引數,該引數阻止get將任何內容解釋為後面的開關。
例如,“get – -silly-name-”。

6.2.10 put命令:向伺服器傳送一個檔案

要從本地PC上載檔案到伺服器,使用put命令。

最簡單的形式,你只需要用一個檔名:

put myfile.dat
如果您想以不同的名稱遠端儲存檔案,請在本地檔名之後指定遠端檔名:

put myfile.dat newname.dat
這將傳送名為myfile.dat的本地檔案
但會以newname.dat的名稱儲存在伺服器上。

遞迴傳送整個目錄,可以使用-r選項:

put - r mydir
put -r mydir newname

如果要傳送名稱以連字元開頭的檔案,可能必須使用—special引數,它阻止put將任何內容解釋為後面的開關。
例如,“put – -silly-name-”。

6.2.11 mget和mput命令:獲取或傳送多個檔案

mget的工作原理與get幾乎完全相同,不同的是它允許您一次指定多個檔案來獲取。
你可以通過兩種方式做到這一點:

  • 通過給出兩個或多個顯式檔名(’ mget file1.txt file2.txt”)
  • 通過使用萬用字元(’ mget *.txt ')。

mget每個引數是作為一個檔案的名稱獲取(不像,這將解釋最多的一個引數,第二個引數將被視為另一個名稱下儲存檢索檔案),或一個萬用字元表示式匹配多個檔案。

get中的-r和-- 選項在mget中也可用。

mput與put相似,但有相同的區別。

6.2.12 reget和reput命令:恢復檔案傳輸

如果檔案傳輸中途失敗,並且您的磁碟上儲存了一半的檔案,那麼您可以使用reget和reput命令恢復檔案傳輸。
這些命令的工作方式與get和put命令完全相同,但是它們檢查編寫了一半的目標檔案是否存在,並從上次嘗試停止的地方開始傳輸。

reget和reput的語法與get和put的語法完全相同:

reget myfile.dat
reget myfile.dat newname.dat
reget -r mydir

這些命令主要用於恢復中斷的傳輸。
它們假設遠端檔案或目錄結構沒有發生任何變化;
如果發生了更改,您可能會得到損壞的檔案。
特別是,-r選項不會選擇對已經完全傳輸的檔案或目錄的更改。

6.2.13 dir命令:列出遠端檔案

要列出遠端工作目錄中的檔案,只需鍵入dir。

你也可以列出一個不同目錄的內容,鍵入dir後跟目錄名:

dir /home/fred
dir sources
通過提供萬用字元,您可以列出目錄內容的子集:

dir /home/fred/.txt
dir source/
.c
ls命令的工作方式與dir完全相同。

6.2.14 chmod命令:修改遠端檔案的許可權

PSFTP允許您修改伺服器上檔案和目錄上的檔案許可權。
您可以使用chmod命令來完成此操作,該命令的工作方式與Unix chmod命令非常相似。

基本語法是chmod模式檔案,其中模式表示對檔案許可權的修改,檔案是要修改的檔名。
可以指定多個檔案或萬用字元。
例如:

chmod go-rwx,u+w privatefile
chmod a+r public*
chmod 640 groupfile1 groupfile2

mode引數可以是Unix樣式中的一組八進位制數字。
(如果你不知道這是什麼意思,你可能不想使用它!)
或者,它可以是許可權修改列表,以逗號分隔。
每項修訂包括:

  • 受修改影響的人。
    可以是u(擁有使用者)、g(擁有組的成員)或o(其他所有人—“其他人”),或者它們的某種組合。
    它也可以是同時影響每個人的(“所有”)。
  • 一個+或-符號,指示許可權是要新增還是刪除。
    正在新增或刪除的實際許可權。
  • 這些許可權可以是r(讀取檔案的許可權)、w(寫入檔案的許可權)和x(執行檔案的許可權,或者在目錄的情況下,訪問目錄中的檔案的許可權)。

所以上面的例子可以做到:

  • 第一個示例:go-rwx刪除所屬組成員和其他所有人的讀、寫和執行許可權(因此僅剩下檔案所有者的許可權)。
    u+w為檔案所有者新增寫許可權。
  • 第二個示例:a+r將每個人的讀許可權新增到以“public”開頭的所有檔案和目錄。

除此之外,還有一些Unix系統的特殊情況。
在非unix系統上,這些不太可能有用:

  • 可以指定u+s和u-s來新增或刪除Unix set-user-ID位。
    這通常只對特殊用途有用;
    如果不確定,請參閱Unix文件。
  • 可以指定g+s和g-s來新增或刪除Unix set-group-ID位。
    在檔案中,這類似於set-user-ID位(請再次參閱Unix文件);
    在一個目錄上,它確保在該目錄中建立的檔案可由擁有該目錄的組的成員訪問。
  • 您可以指定+t和-t來新增或刪除Unix的“sticky bit”。
    當應用於某個目錄時,這意味著該目錄中的檔案所有者可以刪除該檔案(而通常只允許該目錄的所有者刪除該檔案)。
6.2.15 del命令:刪除遠端檔案

要刪除伺服器上的檔案,輸入del,然後輸入檔名:

del oldfile.dat
del file1.txt file2.txt
del *.o

即使指定了多個檔案,也將在沒有進一步提示的情況下刪除檔案。

del只刪除檔案。
不能使用它刪除目錄;
刪除目錄使用rmdir。

rm命令的工作方式與del完全相同。

6.2.16 mkdir命令:建立遠端目錄

要在伺服器上建立一個目錄,輸入mkdir,然後輸入目錄名:

mkdir newstuff
你可以指定多個目錄,以建立一次:

mkdir dir1 dir2 dir3

6.2.17 rmdir命令:刪除遠端目錄

要刪除伺服器上的目錄,輸入rmdir,然後輸入目錄名或名稱:

rmdir oldstuff
rmdir *.old ancient

即使指定了多個目錄,也將在沒有進一步提示的情況下刪除目錄。

如果目錄中有任何內容,大多數SFTP伺服器可能會拒絕刪除該目錄,因此您需要首先刪除內容。

6.2.18 mv命令:移動和重新命名遠端檔案

要重新命名伺服器上的單個檔案,輸入mv,然後是當前檔名,然後是新檔名:

mv oldfile newname
你也可以把檔案移動到另一個目錄,並更改名稱:

mv oldfile dir /newname
若要將一個或多個檔案移動到現有的子目錄中,請指定檔案(如果需要,可以使用萬用字元),然後指定目標目錄:

mv file dir
mv file1 dir1/file2 dir2
mv *.c *.h …
rename和ren命令的工作方式與mv完全相同。

6.2.19 ! 命令:執行本地Windows命令

您可以使用!命令。
這是唯一一個不受第6.2.1節中給出的命令引用規則約束的PSFTP命令。
如果任何命令列以!字元,則行其餘部分將直接傳遞到Windows,無需進一步翻譯。

例如,如果您想在下載更新版本之前將檔案的現有副本移開,您可以輸入:

psftp> !ren myfile.dat myfile.bak
psftp> get myfile.dat

使用Windows ren命令重新命名本地PC上的檔案。

6.3通過PSFTP使用公鑰身份驗證

與PuTTY一樣,PSFTP可以使用公鑰而不是密碼進行身份驗證。
有三種方法可以做到這一點。

首先,PSFTP可以使用PuTTY儲存的會話來代替主機名。
你可以這樣做:

  • 執行PuTTY,並建立一個PuTTY儲存的會話(參見4.1.2節),該會話指定您的私鑰檔案(參見4.22.8節)。
    您可能還需要指定要登入的使用者名稱(參見第4.14.1節)。
  • 在PSFTP中,您現在可以使用會話的名稱而不是主機名:鍵入PSFTP sessionname,其中sessionname被儲存的會話的名稱所替代。
    其次,可以在命令列中使用-i選項提供私鑰檔案的名稱。
    有關更多資訊,請參見3.8.3.18節。

第三,如果pageant正在進行,PSFTP將嘗試使用Pageant進行身份驗證(請參閱第9章),因此您將這樣做:

  • 確保Pageant正在執行,並將您的私鑰儲存在其中。
  • 正常地為PSFTP指定使用者和主機名。
    PSFTP將自動檢測Pageant並嘗試使用其中的金鑰。

有關公鑰身份驗證的更多資訊,請參見第8章。

【翻譯不易,轉載請註明出處 衡與墨https://blog.csdn.net/le_17_4_6】
未完待續