用 SSH 來傳輸文件
PuTTY 提供了兩個文件傳輸工具
- PSCP (PuTTY Secure Copy client)
- PSFTP (PuTTY SFTP client)
PSCP 通過 SSH 連接,在兩臺機器之間安全的傳輸文件,可以用于任何 SSH(包括 SSH v1、SSH v2) 服務器。
PSFTP 則是 SSH-2 中新增的特性,使用的是新的 SFTP 協議,使用上與傳統的 FTP 類似。事實上 PSCP 如果發現 SFTP 可用,PSCP就會使用 SFTP 協議來傳輸文件,否則還是 SCP 協議。PSFTP 與 PSCP 相比,PSFTP 的優點是可以與服務器進行交互,遍歷服務器上的文件系統,在一個會話中上傳或下載多個文件。而 PSCP 只能一次傳輸一個文件,傳輸完畢后立刻終止會話。
PSCP 的使用
在控制臺直接執行 pscp 可以看到幫助
C:\Users\lin>pscp PuTTY Secure Copy client Release 0.68 Usage: pscp [options] [user@]host:source target pscp [options] source [source...] [user@]host pscp [options] -ls [user@]host:filespec Options: -V print version information and exit -pgpfp print PGP key fingerprints and exit -p preserve file attributes -q quiet, don't show statistics -r copy directories recursively -v show verbose messages -load sessname Load settings from saved session -P port connect to specified port -l user connect with specified username -pw passw login with specified password -1 -2 force use of particular SSH protocol ver -4 -6 force use of IPv4 or IPv6 -C enable compression -i key private key file for user authentication -noagent disable use of Pageant -agent enable use of Pageant -hostkey aa:bb:cc:... manually specify a host key (may be repe -batch disable all interactive prompts -proxycmd command use 'command' as local proxy -unsafe allow server-side wildcards (DANGEROUS) -sftp force use of SFTP protocol -scp force use of SCP protocol -sshlog file -sshrawlog file log protocol details to a file
- -q 安靜模式,傳輸文件時什么也不顯示,否則會顯示出文件的傳輸進度,默認是關閉的
- -P port 指定服務器的 SSH 端口,注意這個是大寫字母 P,默認是 -P 22,如果主機的 SSH 端口就是 22,就不用指定了
- -l user 指定以哪個用戶的身份登錄主機,如果沒有指定,則 PSCP 會在 PuTTY 保存的同名 Session 中獲得默認的用戶名稱。用戶名稱也可以和主機名稱寫在一起,用 @ 分割開,比如:username@server
- -pw passwd 指定登錄時所用的口令為 passwd
- -i keyfile 就是指定登錄時所用的密鑰文件
最后面指定的主機名也可以是 PuTTY 中保存的 Session 名稱。比如我們在 PuTTY 中保存了一個名為 foobarserver 的會話,而我們所在的網絡又的確沒有名為 foobarserver 的主機名稱。而在這個 foobarserver 會話中保存的主機名稱是 demo-server,保存的自動登錄的用戶是 taylor。
那么用命令 pscp c:\autoexec.bat foobarserver:backup/
就把本地的 c:\autoexec.bat 復制到了主機 demo-server 上的用戶 taylor 所在的主目錄下的 backup 子目錄中(這個路徑可能是 /home/taylor/backup
PSCP 的案例就是:
pscp -P 22 -i c:\path\your-private-key.ppk -C username@server:/remote/path/
下面還是用一些實例來說明會比較簡單一些:
把本地的 C:\path\foo.txt 復制到遠程主機 192.168.6.200 的 /tmp 目錄下
pscp c:\path\foo.txt 192.168.6.200:/tmp
把本地的 C:\path\foo.txt 復制到主機 192.168.6.200 的 /tmp 目錄下,但是以主機上的用戶 taylor 的權限執行
pscp c:\path\foo.txt taylor@192.168.6.200:/tmp
或者是
pscp -l taylor c:\path\foo.txt 192.168.6.200:/tmp
把本地的 C:\path\foo.txt 傳送到主機 192.168.6.200 的 /tmp 目錄下,但是主機的 SSH 端口是 3122
pscp -P 3122 c:\path\foo.txt 192.168.6.200:/tmp
把本地的 C:\path\foo.txt 復制到主機 192.168.6.200 的用戶 taylor 的主目錄下
pscp c:\path\foo.txt taylor@192.168.6.200:.
把主機 192.168.6.200 上的用戶 taylor 主目錄下的所有 *.tgz 文件拷貝到本地的 c:\backup 目錄中,如果 SSH 版本是 SSH v1,那這個命令就會出錯。
pscp taylor@192.168.6.200:*.tgz c:\backup