使用PuTTY将文件传输到/从我登录的会话中

122

我使用PuTTY登录到远程主机。

如何将本地计算机上的文件传输到我在PuTTY中登录的主机?

13个回答

97

也许这不是你所问的直接答案,但当我需要在 SSH 会话中传输文件时,我使用WinSCP,它是一个优秀的 SCP 或 SFTP 文件传输程序。当然,这假定你正在使用 Windows 操作系统。


1
我尝试了WinScp,但我需要在框上运行一个命令来获取特权。使用WinScp似乎不可能实现这一点? - blue-sky
@user470184:正确。我通常将Putty和WinSCP并排运行。实际上,您可以从WinSCP开始,然后有一个上下文菜单,可选择“在Putty中打开此站点”,如果需要的话。 - Guido Domenici
@GuidoDomenici 看看我在这里使用WinSCP的经验:http://ux.stackexchange.com/q/35936/4424 :-) - corsiKa
1
蓝天:要在WinSCP中使用sudo,请参阅常见问题解答如何在登录后更改用户(例如su root)? - Martin Prikryl
@mishanon,WinSCP实际上支持SSH密钥(包括SSH-1)已有10多年的历史。在创建服务器连接时,在密码字段下,选择“高级>> SSH”----将协议版本设置为1。然后在“高级>> SSH >>身份验证”中设置密钥。 - That Realty Programmer Guy
显示剩余2条评论

73

  • 点击开始菜单。
  • 点击运行。
  • 在打开的窗口中,输入cmd,然后点击确定。
  • 在命令提示符下,输入:

    c:>pscp 源文件名 userid@服务器名:/路径/目标文件名。

例如:

c:>pscp november2012 wrhse@warehouse.cit.cornell.edu:/mydata/november2012。

  • 提示时,请输入服务器密码。

完成。


17
您可以像这样反转它:'c:>pscp wrhse@warehouse.cit.cornell.edu:/mydata/november2012 november2012',来从远程机器接收文件。 - xan
3
pscp是Putty软件包的一部分,但它没有在我的路径中,所以在使用之前我需要将其添加到路径中。pscp应该与putty exe文件位于同一个位置。在我的情况下是c:\Program Files (x86)\PuTTY。 - Frek
1
如果您没有安装完整的PuTTY软件包,您需要从https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html单独下载pscp程序。 - James Newton
@SheshraoWankhede 有没有办法将 pscpssh-keygen 结合起来,以绕过密码?提前感谢。 - Bilal
有人可以看一下这个 https://stackoverflow.com/questions/71094959/file-transfer-from-hard-disk-to-magnolia-did-not-work 的帖子吗?我的问题和上面的问题相同。但是在按照此处描述的过程进行操作后,我并没有成功。 - Encipher
显示剩余2条评论

24

通常情况下,PuTTY自带一个名为psftp的客户端,您可以利用它来完成这个目的。我不认为您可以通过标准的PuTTY客户端来做到这一点(虽然我可能会在这方面被证明是错误的)。

PuTTY仅提供访问远程机器的功能,并没有像坐在远程机器前一样直接链接两个文件系统的功能。


远程机器上未安装psftp。 - blue-sky
4
没必要这样做,只需要在你的本地机器上操作即可。 - corsiKa
以下是有关使用psftp传输文件的信息:http://pic.dhe.ibm.com/infocenter/tsmscv13/v1r0m0/index.jsp?topic=%2Fcom.ibm.mconsole.doc%2Ffqg0_t_transfering_files_using_psftp.html - shasi kanth

13

您也可以从以下网址下载psftp.exe:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

当您运行它时,输入:

open "server name"

那么:

put "file name"

(输入 help 以获取所有命令的完整列表。)

您还可以输入 get <文件名> 从远程机器下载文件到本地机器。


这是从命令行中最简单的方法,谢谢! - Mehdi
本地机器上运行的目录是什么?我收到一个错误,说找不到我想要发送的文件。 - MrChadMWood

13

在PuTTY窗口中打开的SSH会话中,无法启动文件传输以与本地Windows进行交互。

虽然PuTTY支持连接共享。

尽管仍需要运行兼容的文件传输客户端(pscppsftp),但无需新登录,它会自动(如果启用)利用现有的PuTTY会话。

要启用共享,请参见:
在PuTTY工具之间共享SSH连接


另一种方法是使用WinSCP,这是一个GUI SFTP / SCP客户端。当您浏览远程站点时,您可以随时使用Open in PuTTY按钮打开相同站点的SSH终端。

请参阅在PuTTY中打开会话

通过额外的设置,您甚至可以让PuTTY自动导航到与WinSCP浏览的相同目录。

请参阅在相同目录中打开PuTTY

(我是WinSCP的作者)


1
Martin,WinSCP真是太棒了 - 干得好,伙计。非常感谢你 :-) - shadowf

10

既然你问到“to/from”的问题,这里有一个技巧可以帮助你处理“from”部分。打开“更改设置...”屏幕,找到终端,在“要将ANSI打印机输出发送到的打印机:”下选择“通用/纯文本”。

现在,在远程系统上,在一行中运行以下命令:

tput mc5; cat whatever.txt; tput mc4

Putty会告诉您文件已保存。它所做的是将终端放入打印机模式(tput mc5),将文件打印到屏幕上(cat),然后关闭打印机模式(tput mc4)。如果您不将所有命令放在一行上,屏幕将出现冻结,因为Putty正在将所有终端输出保存到后台文件中。

如果您使用的是没有tput命令的更受限制的系统(例如qnap),则可以尝试使用printf "\x1b [5i"代替tput mc5,并使用printf "\x1b [4i"代替tput mc4。

中间的命令只是任何打印到屏幕上的内容。因此,使用tail -n 10000 blah.log下载日志文件的最后10k行,或使用base64编码器将二进制文件映射到可以打印的内容(然后在本地系统上进行解码):

printf "\x1b[5i"; openssl enc -base64 -in something.zip; printf "\x1b[4i"

您真是个天才!我一直在寻找一种在活动的SSH会话中传输文件的方法,而这是我能够轻松使用的第一个方法。您知道是否可以修改此技术以在macOS或Linux客户端上使用终端(即除PuTTY之外的终端)吗? - Dominic P
该死,我的 Citrix 环境中没有通用/纯文本打印机可用。Hamstrong 可以访问 PuTTY,但没有 SCP 客户端... - Colin 't Hart

8
如果只有一个文件,您可以使用以下步骤(在putty中):
  1. vi 文件名.扩展名(在服务器上打开活动文件夹中的新文件),
  2. 复制+鼠标右键单击putty(复制并粘贴),
  3. 编辑和保存。 =>vi编辑器命令

使用下一个命令编辑文件权限:chmod u+x 文件名.扩展名


1
这对于适合放入剪贴板的文本文件非常有效。对于二进制文件,请参见xxd,但您还需要一个Windows程序将二进制转换为十六进制。例如HEXDUMP - James Newton
1
@JamesNewton 感谢你,非常感激!我的解决方案来自学生时代,当时我们经常从一台电脑移动到另一台电脑。安装软件根本不是一个解决方案。我们只需要把putty(和scp)放在USB盘上。但是仅为了传输一个文件而运行WinScp就有些过度了。 - mggluscevic

4
如果您需要进行私钥验证,请在命令提示符(cmd)下运行以下命令:

首先;

set PATH=C:\PuttySetupLocation

第二;
pscp -i C:/MyPrivateKeyFile.ppk C:/MySourceFile.jar ubuntu@55.69.41.155:/home/ubuntu

此外,如果您需要额外选项,请查看以下链接。https://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter5.html

set PATH=C:\PuttySetupLocation 的意义是什么?为什么不直接使用 C:\PuttySetupLocation\pscp?即使您想修改 PATH,也应该添加新路径,而不是完全重置它。 - Martin Prikryl
运行 set PATH=C:\PuttySetupLocation 不会重置路径,只会将 PSCP 添加到路径作为新条目。此外,您关于使用 C:\PuttySetupLocation\pscp 也是正确的。这也是有效的。 - ÖMER TAŞCI
2
它确实重置了路径。 - Martin Prikryl
哪个密码?它不应该与任何密码设置相关。 - ÖMER TAŞCI
什么密码?也许你在我发布评论后立即阅读了我的评论,其中“password”打成了“path”的错别字。我在发布后一秒钟内进行了修正(早于你的评论)。 - Martin Prikryl

4

谢谢,我正在使用私钥登录,但上面的链接似乎没有详细说明? - blue-sky
1
如果您已经两年没有找到如何做到这一点,可以在此页面底部找到如何操作的说明:>此页面< - Hawkwing

3

使用Putty(pscp/plink.exe)传输文件

默认的Putty安装提供了多种传输文件的方式。 很可能putty已经在您的默认路径中,因此您可以直接从命令提示符中调用 putty。如果没有,您可能需要更改环境变量。请参见此处的说明: https://it.cornell.edu/managed-servers/transfer-files-using-putt

步骤

  1. 输入 cmd 打开命令提示符

  2. 要将文件夹从您的 Windows 计算机 传输到另一个 Windows 计算机,请使用以下命令(请注意 -r 标志,它表示文件将递归传输,无需压缩):pscp -r -i C:/Users/username/.ssh/id_rsa.ppk "C:/Program Files (x86)/Terminal PC" ipython_user@10.15.48.54:/"C:/Program Files (x86)/"

  3. 要将文件从您的 Windows 计算机 传输到另一个 Windows 计算机,请使用以下命令:pscp -i C:/Users/username/.ssh/id_rsa.ppk "C:/Program Files (x86)/Terminal PC" ipython_user@10.15.48.54:/"C:/Program Files (x86)/"

  4. 有时,您可能只安装了 plinkplink 可能用于传输文件,但最好仅限于简单文本文件。 它可能具有二进制文件的未知行为(https://superuser.com/questions/1289455/create-text-file-on-remote-machine-using-plink-putty-with-contents-of-windows-lo):plink -i C:/Users/username/.ssh/id_rsa.ppk user@host <localfile "cat >hostfile"

  5. 要将文件从 Linux 服务器传输到 Windows 计算机或 Linux 计算机,请使用以下命令:pscp -r -i C:/Users/username/.ssh/id_rsa.ppk "C:/Program Files (x86)/Terminal PC" username@10.15.48.16:/home/username

为了让这些工作正常运行,您需要拥有正确的公钥/私钥。要为putty生成它,请参见:https://superuser.com/a/1285789/658319

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接