通过 SSH 传输文件 [关闭]

Posted

技术标签:

【中文标题】通过 SSH 传输文件 [关闭]【英文标题】:Transferring files over SSH [closed] 【发布时间】:2010-09-25 12:22:14 【问题描述】:

我正在命令行上通过 SSH 连接到远程服务器,并尝试使用 scp 命令将目录复制到我的本地计算机上。但是,远程服务器返回此“使用”消息:

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

我希望能够双向传输文件。根据我的阅读,我认为上面的命令可以用于下载,scp -p [localpath] [remotepath] 可以用于上传?

【问题讨论】:

【参考方案1】:

不,您仍然需要scp [from] [to],无论您以哪种方式复制

不同的是,你需要scp -p server:serverpath localpath

【讨论】:

-p 的作用是什么? 来自man scp:保留原始文件的修改时间、访问时间和模式。 要明确 -p 仅包含在此处,因为 OP 在其原始问题中包含了标志。它与答案没有任何关系【参考方案2】:

你需要scp 某处。你有scp ./styles/,所以你说的是安全复制./styles/,但不是复制到哪里。

一般来说,如果你想下载,它会去:

# download: remote -> local
scp user@remote_host:remote_file local_file 

local_file 实际上可能是一个目录,用于放置您要复制的文件。要上传,则相反:

# upload: local -> remote
scp local_file user@remote_host:remote_file

如果要复制整个目录,则需要-rscpcp 类似,但您可以使用 user@remote_host:file 指定文件以及仅指定本地文件。

编辑:如注释中所述,如果本地和远程主机上的用户名相同,则在指定远程文件时可以省略用户。

【讨论】:

注意,如果远程主机和本地主机上的用户相同,用户名可以省略:scp hello.c myserver.net:~/projects/ 是的,没错,我会对此添加注释。我将用户包括在内,因为这样我给出的示例将始终有效。 :) 我在这方面遇到了困难……这是正确的。 scp C:\filename.txt server1@server2:home 请在“donload”和“upload”上添加粗体格式。 "naturally" (我说自然是因为我在这上面浪费了 15 分钟)你不应该在尝试“下载”到本地时连接到远程主机,因为如果你正在执行代码一个远程实例,“本地”将被解释为“远程”,如果你明白我的意思的话。所以不要先运行ssh。【参考方案3】:

如果复制到/从您的桌面计算机,请使用 WinSCP,或者如果在 Linux 上,Nautilus 通过连接到服务器选项支持 SCP。

scp 只能将文件复制到运行 sshd 的机器上,因此您需要从正在运行 scp 的机器上运行远程机器上的客户端软件。

如果在命令行复制,使用:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile

【讨论】:

你就是那个男人。我在不到 10 秒的时间内部署了一个博客,而无需在服务器端进行任何额外安装! 这非常有效。我在 cmd 中使用了 msysgit,因为它同时具有 scp 和 ssh。 这非常有效。我用 scp * user@host:/path/to/where 这应该是最佳答案。 感谢 WinSCP 的建议。比尝试手动编写所有这些命令要容易得多...【参考方案4】:

你需要指定源和目标,如果你想复制目录,你应该看看 -r 选项。

所以要递归地将 /home/user/whatever 从远程服务器复制到您的当前目录:

scp -pr user@remoteserver:whatever .

【讨论】:

以上是关于通过 SSH 传输文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过ssh协议在各系统间传输文件

通过 SSH 在远程和本地系统之间传输文件的 4 种方法

使用 Java 通过 SSH 隧道传输文件

通过ssh传输文件

golang通过ssh实现远程文件传输

通过SSH实现Windows与linux之间传输文件