scp 文件从本地到远程机器错误:没有这样的文件或目录
Posted
技术标签:
【中文标题】scp 文件从本地到远程机器错误:没有这样的文件或目录【英文标题】:scp files from local to remote machine error: no such file or directory 【发布时间】:2014-12-08 09:20:21 【问题描述】:我希望能够将目录及其所有文件从本地计算机传输到远程计算机。我不怎么用SCP,所以有点糊涂。
我通过 ssh 连接到我的远程机器并输入了命令
scp name127.0.0.1:local/machine/path/to/directory filename
local/machine/path/to/directory
是我在本地主机上的所需目录中使用 pwd
获得的值。
我目前遇到错误
No such file or directory
【问题讨论】:
你的错误是你连接到远程机器然后输入了命令。您应该在您自己的系统中运行该命令,而不是在您连接时所在的目录中。 【参考方案1】:看起来您正在尝试使用该命令复制到本地计算机。
一个示例 scp 看起来更像下面的命令:
将文件“foobar.txt”从本地主机复制到远程主机
$ scp foobar.txt your_username@remotehost.edu:/some/remote/directory
scp "the_file" your_username@the_remote_host:the/path/to/the/directory
发送目录:
将目录“foo”从本地主机复制到远程主机的目录“bar”
$ scp -r foo your_username@remotehost.edu:/some/remote/directory/bar
scp -r "the_directory_to_copy" your_username@the_remote_host:the/path/to/the/directory/to/copy/to
并从远程主机复制到本地:
将文件“foobar.txt”从远程主机复制到本地主机
$ scp your_username@remotehost.edu:foobar.txt /your/local/directory
scp your_username@the_remote_host:the_file /your/local/directory
并包括端口号:
将文件“foobar.txt”从远程主机的8080端口复制到本地主机
$ scp -P 8080 your_username@remotehost.edu:foobar.txt /your/local/directory
scp -P port_number your_username@the_remote_host:the_file /your/local/directory
使用putty从windows机器到linux机器
pscp -r <directory_to_copy> username@remotehost:/path/to/directory/on/remote/host
【讨论】:
感谢您的帮助。这接近解决我的问题,但还没有完全解决。我希望能够发送目录及其所有内容。我试过的是scp -r path/to/directory username@remotehost
如果您需要明确指定端口号,请使用 -P portNumber。例如` scp -P 2200 bprajapati@192.168.202.124:/tmp/bs-404 ~/Documents`
只是一个重要的点让我感到困惑。如果对目标或源使用scp://user@host:port/path/to/file
语法,请注意端口号后的第一个“/”只是将端口与路径分隔开。因此,如果要使用绝对路径,请在端口号后使用两个反斜杠字符:scp://user@host:port//my/absolute/path/to/file
【参考方案2】:
就我而言,我必须使用
指定端口号scp -P 2222 username@hostip:/directory/ /localdirectory/
【讨论】:
并确保您使用的是大写的 P 而不是 p。如果你问我 scp 给出的“没有这样的文件”错误消息是极具误导性的,甚至可能被归类为错误。例如,如果您在使用 ssh 时犯了同样的错误,它会显示“ssh: connect to host 2222 port 2222: Invalid argument”,这会更有帮助。【参考方案3】:您的问题可能是由不同的原因引起的。我将为您提供 Linux 中的三种可能场景:
文件位置当您使用 scp name 时,您的意思是您的文件 name 在 Home 目录中。当它在 Home 但在另一个 Folder 中时,例如,my_folder,你应该写:
scp /home/my-username/my_folder/name my-username@127.0.0.1:/Path....
您的文件权限
您必须知道您的文件拥有的文件权限。如果你有只读,你应该改变它。
更改权限:
作为 Root ,sudo caja
(MATE 桌面的默认文件管理器)或another 文件管理器,然后用鼠标右键单击文件 name,选择 属性 + 权限
并在 Group 和 Other 上将其更改为 Read and write。
或者chmod。
您的端口号也许你的远程机器或服务器只能与一个端口号通信,所以你应该写-P和端口号。
scp -P 22 /home/my-username/my_folder/name my-usernamee@127.0.0.1 /var/www/html
【讨论】:
【参考方案4】:我遇到了类似的问题。我试图从服务器复制到我的桌面,并且总是得到相同的本地路径消息。问题是,我已经通过 ssh 登录到我的服务器,所以它正在服务器路径中搜索本地路径。
解决方案:我必须注销并再次运行该命令,它可以工作
【讨论】:
谢谢。我没有意识到。这真的很有帮助。【参考方案5】:确保您发送文件的文件夹不包含空格!
我试图从 VS 代码终端从我的 windows 机器向远程服务器发送文件,即使文件在这里,我也会收到此错误。
这是因为文件所在的文件夹名称中包含空格...
【讨论】:
【参考方案6】:如果您想复制文件夹中的所有内容 + 有一个特殊的端口,请使用此端口。 在 Ubuntu 18.04 和装有 Mac OS X 的本地机器上为我工作。
-r for recursive
-P for Port
scp -rP 1234 /Your_Directory/Source_Folder/ username@yourdomain.com:/target/folder
【讨论】:
还有其他答案提供了 OP 的问题,它们是前段时间发布的。发布答案 see: How do I write a good answer? 时,请确保添加新的解决方案或更好的解释,尤其是在回答较老的问题时。【参考方案7】:正如@Astariul 所说,文件路径可能会导致此错误。 此外,任何包含非 ASCII 字符的父目录,例如 Chinese,都会导致此问题。 在这种情况下,你应该重命名你的父目录
【讨论】:
【参考方案8】:您还需要确定用户的 .bashrc 文件中有什么内容。
我也遇到了这个荒谬的错误,因为我在其中放了 cd
和 ls
命令,因为这意味着当用户从 ssh 登录时让他们看到当前文件和目录。
【讨论】:
【参考方案9】:文件名应该放在目录路径的末尾。也就是说,它应该是文件的完整路径。您正在从命令行执行此操作,并且您有该命令行的工作目录(在您的本地计算机上),这是您的文件将被下载到的目录。命令中的最后一个参数只是您想要的文件名。因此,首先,将目录更改为您希望文件所在的位置。我在 Windows 机器上从 git bash 执行此操作,所以它看起来像这样:
cd C:\Users\myUserName\Downloads
现在我有了想要文件所在的工作目录:
scp -i 'c:\Users\myUserName\.ssh\AWSkeyfile.pem' ec2-user@xx.xxx.xxx.xxx:/home/ec2-user/IwantThisFile.tar IgotThisFile.tar
或者,在你的情况下:
cd /local/path/where/you/want/the/file/to/land
scp name@127.0.0.1:/local/machine/path/to/directory/filename filename
【讨论】:
【参考方案10】:这发生在我身上,我解决了。 此问题可能是因为您尝试获取的文件不存在(文件或文件夹名称中的拼写错误?)或者因为您在 scp.xml 中输入的用户看不到它。 我的问题是我想从远程机器获取的文件是由另一个用户(我的情况是 root)创建的,所以这些文件是不可见的
为了修复,我做了: ssh myuser@myserver chown myuser:myuser 我的文件 出口 scp mysuer@myserver:/home/myuser/myfile /localfolder/myfile
【讨论】:
以上是关于scp 文件从本地到远程机器错误:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章