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 user@hostname -b myscript.scr
当您以这种方式运行批处理脚本时,如果任何命令未能成功完成,PSFTP将中止该脚本。
要更改此行为,可以添加-be选项(第6.1.3节)。

PSFTP将在完成批处理脚本的执行后终止。

6.1.2 -bc:在批处理命令运行时显示它们

bc选项在处理用-b指定的批处理脚本时更改PSFTP显示的内容。
使用-bc选项,PSFTP将显示提示和命令,就像在键盘上输入命令一样。
所以会看到这个

C:\>psftp fred@hostname -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 fred@hostname -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】
未完待续

猜你喜欢

转载自blog.csdn.net/le_17_4_6/article/details/86406291