PuTTY用户手册(九)

第5章:使用PSCP安全传输文件

PSCP是PuTTY安全复制客户端,是一种使用SSH连接在计算机之间安全地传输文件的工具。

如果您有一个SSH-2服务器,您可能更喜欢使用PSFTP(参见第6章)进行交互。
但是,PSFTP通常不能与SSH-1服务器一起工作。

5.1开始PSCP

PSCP是一个命令行应用程序。
这意味着您不能双击它的图标来运行它,而是必须打开一个控制台窗口。
对于Windows 95、98和ME,这称为“MS-DOS提示符”;对于Windows NT、2000和XP,这称为“命令提示符”。
它应该可以从“开始”菜单的“程序”部分获得。

要启动PSCP,它需要位于您的路径上或当前目录中。
要将包含PSCP的目录添加到路径环境变量中,请在控制台窗口中键入:

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

这只适用于特定控制台窗口的生命周期。
要在Windows NT、2000和XP上更永久地设置路径,请使用系统控制面板的Environment选项卡。
在Windows 95、98和ME上,您需要编辑AUTOEXEC。
BAT包含一个set命令,如上面的命令。

5.2 PSCP用法

一旦您有一个控制台窗口可以输入,您就可以自己输入pscp来显示使用消息。
这将告诉您正在使用的PSCP版本,并简要介绍如何使用PSCP:

Z: \ owendadmin > pscp
PuTTY Secure Copy client

0.70版本
用途:

pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec

选项:

-V        打印版本信息并退出
-pgpfp    打印PGP密钥指纹并退出
-p        保存文件属性
-q        静默,不要显示数据
-r        递归复制目录
-v        显示详细的消息
-load sessname  从保存的会话加载设置
-P        端口连接到指定端口
-l        用户连接指定的用户名
-pw passw    密码登录
-1 -2     强制使用特定的SSH协议版本
-4 -6     强制使用IPv4或IPv6
-c        启用压缩
-i key    用于用户身份验证的密钥私有密钥文件
-noagent  禁用pageant
-agent    代理允许使用Pageant
-hostkey aa: bb:……
          手动指定主机键(可能重复)
-batch    批处理禁用所有交互式提示
-proxycmd 命令
          使用“命令”作为本地代理
-unsafe   允许服务器端通配符(危险)
-sftp     强制使用SFTP协议
-scp      强制使用SCP协议
-sshlog file
-sshrawlog file
将协议细节日志记录到文件中
(如果您熟悉的话,PSCP的接口与Unix scp命令非常相似。)
5.2.1基础

从远程服务器接收单个或多个文件:

pscp [options] [user@]host:source target

因此,要将文件/etc/hosts作为用户fred从服务器example.com复制到文件c:\temp\example-hosts。
txt,你可以输入:

pscp [email protected]:/etc/hosts c:\temp\example-hosts.txt

向远程服务器发送单个或多个文件:

pscp [options] source [source…] [user@]host:target

复制本地文件c:\document \foo.txt到服务器example.com作为用户fred到文件/tmp/foo,你会键入:

pscp c:\documents\foo.txt [email protected]:/tmp/foo

您可以使用通配符在任意方向传输多个文件,如下所示:

pscp c:\documents*.doc [email protected]:docfiles
pscp [email protected]:source/*.c c:\source

然而,在第二种情况下(对多个远程文件使用通配符),您可能会看到类似于“warning: remote host tried to write to a file called ‘terminal.c’ ”这样的警告。
当我们请求一个名为“*.c”的文件时。
如果这是一个通配符,考虑升级到SSH-2或使用“-unsafe”选项。
此文件的重命名已被禁止’。

这是由于旧式SCP协议中的一个基本不安全因素:客户机将通配符字符串(.c)发送到服务器,服务器将返回与通配符模式匹配的文件名序列。
但是,没有什么可以阻止服务器发回不同的模式并覆盖其他文件:如果您请求

服务器可能会发送回文件名AUTOEXEC.BAT和一个病毒。
由于通配符匹配规则是由服务器决定的,客户机无法可靠地验证发回的文件名是否与模式匹配。

PSCP将尝试在可能的情况下使用更新的SFTP协议(SSH-2的一部分),该协议不存在此安全缺陷。
如果您正在与支持SFTP的SSH-2服务器对话,则永远不会看到此警告。
(如果可以,您可以强制使用SFTP协议,使用- SFTP -请参见5.2.2.6节)。

如果您确实需要在SSH-1服务器上使用服务器端通配符,那么可以在PSCP上使用- safe命令行选项:

pscp -unsafe [email protected]:source/*.c c:\source

这将抑制警告消息,文件传输将发生。
然而,您应该意识到使用这个选项你给了服务器有能力写入目标目录中的任何文件,所以您应该只使用这个选项在你你信任服务器管理员时(而且不要让服务器被怀有恶意的人破解)。
或者,在新创建的空目录中执行任何此类下载。
(即使在“不安全”模式下,PSCP仍然会保护您不受试图使用包括“…”在内的路径名从该目录中退出的服务器的攻击。)

5.2.1.1用户(user)
远程服务器上的登录名。
如果省略了这一点,并且主机是PuTTY保存的会话,那么PSCP将使用该保存会话指定的任何用户名。
否则,PSCP将尝试使用本地Windows用户名。

5.2.1.2主机(host)
远程服务器的名称,或已保存的PuTTY会话的名称。
在后一种情况下,将使用会话的主机名、端口号、密码类型和用户名设置。

5.2.1.3资源(source)
一个或多个源文件。
通配符是允许的。
通配符的语法取决于其应用系统,如果你复制从Windows系统UNIX系统中,您应该使用Windows通配符语法(例如*.),但如果你从一个UNIX系统复制到Windows系统中,可以使用通配符语法允许您的UNIX shell(例如)。

如果源是远程服务器,而您没有指定完整路径名(在UNIX中,路径名以/(斜杠)字符开头),那么您指定的源将相对于远程服务器上的主目录进行解释。

5.2.1.4目标(target)
存放文件的文件名或目录。
当从远程服务器复制到本地主机时,您可能只希望将文件放在当前目录中。
为此,您应该指定…的目标。
例如:

pscp [email protected]:/home/tom/.emacs .


将复制远程服务器上的/home/tom/.emacs到当前目录。

与源参数一样,如果目标位于远程服务器上且不是完整路径名,则相对于远程服务器上的主目录对其进行解释。

5.2.2选项

PSCP接受PuTTY工具支持的所有一般命令行选项,除了在文件传输实用程序中没有意义的选项。
有关这些选项的描述,请参见第3.8.3节。
(PSCP不支持的标注清晰。)

PSCP还支持它自己的一些选项。
下面几节描述PSCP的特定命令行选项。

5.2.2.1 -ls列出远程文件
如果提供-ls选项,则不传输文件;
而是列出远程文件。
只需要给出主机名规范和可选的远程文件规范。
例如:

pscp - ls [email protected]: dir1
SCP协议本身不包含列出文件的方法。
如果使用SCP,则此选项假定服务器对ls -la命令作出适当的响应;
这可能不适用于所有服务器。

如果使用SFTP,则此选项应适用于所有服务器。

5.2.2.2 -p保存文件属性
默认情况下,使用PSCP复制的文件的时间戳上日期和时间。
p选项保留复制文件上的原始时间戳。

5.2.2.3 -q安静,不要显示统计数据
默认情况下,PSCP显示一个仪表,显示当前传输的进度:

mibs.tar | 168 kB | 84.0 kB/s | ETA: 00:00:13 | 13%

此显示中的字段包括(从左到右)、文件名、到目前为止传输的文件大小(单位为千字节)、估计文件传输的速度(单位为千字节每秒)、估计传输完成的时间以及到目前为止传输的文件的百分比。
PSCP的-q选项抑制了这些统计信息的打印。

5.2.2.4 -r递归复制目录
默认情况下,PSCP只复制文件。
您指定要复制的任何目录都将被跳过,它们的内容也将被跳过。
r选项告诉PSCP进入您指定的任何目录,并复制它们及其内容。
这允许您使用PSCP在机器之间传输整个目录结构。

5.2.2.5 -批量避免交互式提示
如果使用-batch选项,PSCP在建立连接时永远不会给出交互式提示。
例如,如果服务器的主机键无效(请参见2.2节),那么连接将被简单地放弃,而不是询问下一步要做什么。

这可能有助于PSCP在自动化脚本中使用时的行为:使用-batch,如果在连接时出现问题,批处理作业将失败,而不是挂起。

5.2.2.6 -sftp、-scp强制使用特定协议
如5.2.1节所述,SSH使用两种不同的文件传输协议。
尽管名称不同,但是PSCP(像许多其他表面上的scp客户机一样)可以使用这两种协议中的任何一种。

旧的SCP协议没有书面规范,并将许多细节留给服务器平台。
通配符在服务器上展开。
简单的设计意味着可以使用服务器平台支持的任何通配符规范(例如大括号展开),但是也会导致互操作性问题,比如文件名引用(例如,文件名包含空格),以及5.2.1节中描述的安全性问题。

新的SFTP协议通常与SSH-2服务器相关联,它以一种更独立于平台的方式指定,并将通配符语法等问题留给客户机处理。
(PuTTY的SFTP通配符语法见第6.2.2节)。
这使得它在跨平台上更加一致,更适合脚本和自动化,并且避免了通配符匹配的安全问题。

通常PSCP将尝试使用SFTP协议,并且只有在服务器上没有SFTP时才返回到SCP协议。

-scp 选项强制PSCP使用SCP协议或退出。

-sftp 选项强制PSCP使用SFTP协议或退出。
当指定此选项时,PSCP将更难查找SFTP服务器,这可能允许根据服务器设置将SFTP与SSH-1一起使用。

5.2.3返回值

只有在正确传输文件时,PSCP才返回0(成功)的错误级别。
您可以在批处理文件中对此进行测试,使用如下代码:

pscp file*.* user@hostname:
if errorlevel 1 echo There was an error

5.2.4使用PSCP进行公钥认证

与PuTTY一样,PSCP可以使用公钥而不是密码进行身份验证。
有三种方法可以做到这一点。

首先,PSCP可以使用PuTTY保存的会话代替主机名(参见5.2.1.2节)。
所以你会这样做:

  • 运行PuTTY,并创建一个PuTTY保存的会话(参见4.1.2节),该会话指定您的私钥文件(参见4.22.8节)。
    您可能还需要指定要登录的用户名(参见第4.14.1节)。
  • 在PSCP中,您现在可以使用会话的名称而不是主机名:键入PSCP sessionname:file localfile,其中sessionname被保存的会话的名称所替代。

其次,可以在命令行中使用-i选项提供私钥文件的名称。
有关更多信息,请参见3.8.3.18节。

第三,如果比赛正在进行,PSCP将尝试使用Pageant进行身份验证(参见第9章)。

  • 确保Pageant正在运行,并将您的私钥存储在其中。
  • 向PSCP正常指定用户和主机名。
    PSCP将自动检测Pageant并尝试使用其中的键。

有关公钥身份验证的更多信息,请参见第8章。

【翻译不易,转载请注明出处 衡与墨https://blog.csdn.net/le_17_4_6】
未完待续

猜你喜欢

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