使用scp将文件从本地目录X传输到远程目录Y


99

我在这里浏览了其他问题以及Internet上的各种“ scp用法”教程,但是我无法弄清问题所在。

我正在使用Linux Mint,并且试图弄清楚scp的工作原理。

我在计算机上的目录/ home / name / dir /中有一个文件file.ext(在我的计算机上)

我使用ssh连接到远程计算机,例如:

ssh -p 2222 username@domain

它询问我密码,外壳显示:

username@domain ~ $

现在,如果我发出命令(在运行ssh之前,我在本地目录 / home / name / dir中):

scp -r -P 2222 file.ext username@domain 

输出为:

cp: cannot stat ‘file.ext’: No such file or directory

如果我写完整路径而不是file.ext,则结果相同

scp -r -P 2222 /home/name/dir/file.ext username@domain 

另外,服务器管理员告诉我,我将文件上传到远程主目录(而不是root),例如:

scp -r -P 2222 file.ext username@domain:~/

但是当我这样做并按“ Enter”时,什么也没有发生,就像外壳正在等待进一步的输入一样。

我的问题摘要:

  • cp:没有这样的文件或目录
  • 壳“卡在”〜/

有什么建议么?


尚不清楚您的问题是否仅与位于错误的计算机上有关...请为每个命令加上正在运行的主机的前缀吗?例如localuser@machineA: ssh -p 2222 username@domain(以表明您正在运行的SSH命令,如第machineA的localuser)
umläute

1
使用时scp,将遥控身边总是必须包含冒号(例如remotehost:/tmp),否则将只是做一个普通的副本(scp /tmp/foo.txt example.com将复制/tmp/foo.txt到本地文件example.com
umläute

删除-r标志,因为这是不需要拷贝单个文件(它是用来递归地复制目录)
umläute

您是否在sshe会话中发出了scp命令?如果您在本地计算机上,这将很有意义。
亚历克西斯

Answers:


119

您需要scp从本地计算机而不是远程计算机上运行命令。您根本不需要ssh

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

您也不需要-r

 -r      Recursively copy entire directories.  

如果您已经登录到远程计算机并想从本地复制,则需要确保可以通过Internet访问本地计算机并进行了ssh设置。我不认为这是您想要的,但是如果是这样,请从远程运行此命令:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
谢谢。问题是我试图在ssh会话中运行scp。现在可以了!
dragonmnl 2014年

28

我提供了两种在远程和本地计算机之间上载/下载文件的方法(我使用Mac air):

在这种情况下,我想在本地和远程之间上调/下调“ 11.jpeg”:

1。

将服务中的文件复制到本地目录:您必须在本地bash终端中才能执行此命令,而不是在ssh中!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

将本地目录中的文件复制到远程服务:您也必须在本地bash终端中

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. 要在登录SSH时达到相同的目的,必须首先设置“系统偏好设置>共享>远程登录>所有用户(我不确定是否必须为“所有用户”设置,但是在这种情况下可以使用”” Mac会告诉您”“要远程登录到此计算机,请输入:ssh username @ xxxxxx,然后输入以下命令:

    scp用户名@域:/home/xxx/xxx/11.jpeg用户名@xxxxxx:/用户/用户名/桌面/

上面的命令用于在登录ssh时将文件从远程下载到本地,只需在要上传文件时更改两个路径。


最后,我发现Filezilla可能是日常工作中最方便的一个~~
maizer

5

如果在远程计算机上运行此scp命令,则它将file.ext作为“本地”文件(即在远程计算机上)查找

若要从远程计算机复制文件到本地一个,使用scp -P 2222 username@domain:dir/file.ext localdir(假设file.ext是在~/dir远程计算机上,如你的例子)。如果scp在远程计算机上运行,请反转“本地”和“远程”。


1
OP 希望从本地复制到远程,请参见OP的标题。
terdon

糟糕,我想您是对的。但是他显然是倒退了……
Alexis

3

使用scp命令

如果要传输文件夹,请先传输,zip然后再传输unzip

在您的计算机上,运行以下命令:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

root是您的帐户,10.145.198.100是远程服务器的IP地址。我们将复制the_file~/远程文件夹中。

解压缩文件:

$ unzip the_zip_file.zip -d destination_folder

为什么root甚至在远程计算机上也可以使用SSH访问?那是很不安全的。最好使用普通用途,然后再sudo在该计算机上执行root要做的任何事情。
库沙兰丹

1

仅做一小部分贡献,也许可以对像我这样的初学者有所帮助:远程目录的路径应这样写: username@domain:~/remote_directory

我想在这里强调的是,我们应该始终添加 :~/


0

将文件从复制Linux client到的解决方案Linux Server

  1. 使用以下命令检查sshd服务器上是否正在运行: ps aux | grep sshd

  2. 如果未OpenSSH使用 https://www.tecmint.com/install-openssh-server-in-linux/安装sudo apt-get install openssh-server openssh-client

  3. 重新启动服务器,并使用验证其sshd是否正在运行 ps aux | grep sshd

  4. 如果需要,您可以配置/etc/ssh/sshd_config文件,但对于简单配置而言则不需要

  5. 使用以下命令验证端口是否打开 netcat nc -v -z 127.0.0.1 22

  6. 要将文件从Linux客户端复制到Linux客户端,请使用scp,如下所示 scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. 要验证文件已被复制,请使用 ssh username@10.22.33.45并提供您的密码。

将文件复制Linux client到Windows的解决方案

  1. 有多个客户端可在Windows上运行SSH服务器,例如 来自MS的OpenSSH

    MobaSSH

    Bitvise SSH服务器

  2. 安装上述服务器之一,并确保使用以下命令打开端口22

    netsh advfirewall防火墙添加规则名称=“ SSH端口22” dir =生效=允许协议= UDP localport = 22

    netsh advfirewall防火墙添加规则名称=“ SSH端口22” dir = out操作=允许协议= UDP localport = 22

    netsh advfirewall防火墙添加规则名称=“ SSH端口22” dir =生效=允许协议= TCP localport = 22

    netsh advfirewall防火墙添加规则名称=“ SSH端口22” dir = out操作=允许协议= TCP localport = 22

    netsh advfirewall将所有配置文件设置为关闭状态

  3. 这些服务器的比较:

    Bitvise SSH服务器

    1. 提供几乎接近本机的cmd提示,powershell提示,自动补全

    2. 如果需要高级用法,则提供其他自定义功能

    3. 满足简单需求的用户定制为0。花了很多时间尝试入门MobaSSHOpenSSH工作后,我在2分钟内就开始使用它。

    4. 要使用scp复制文件,请使用: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. 免费供个人使用,专业用途为$ 99。由于具有如此多的功能和出色的集成性,因此物有所值

    MobaSSH:

    1. 提供窗Linux外壳,其中简单的Linux命令如lscpfind等工作,类似于MINGW64

    2. 您可以访问cmdpowershell通过打字直接cmdpowershell

    3. Unicode支持很差。编码不正确。例如,如果您尝试启动Python解释器,它将崩溃。您将需要使用(https://stackoverflow.com/a/12834315/4752883)手动更改编码: chcp 65001 set PYTHONIOENCONDING=utf-8 然后启动Python提示符

    4. MobaSSH的伟大之处在于它具有非常简单的用户界面,并且scpssh并且集成良好。因此适用于简单的用例

    5. 要将文件从Linux客户端复制到Windows运行中的服务器,请执行以下操作 MobaSSH:使用 scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md 这是因为MobaSSH基于,cygwin并且其驱动器映射到cygwin-s驱动器的映射方式相同。

    将Microsoft的VM与https://developer.microsoft.com/zh-cn/microsoft-edge/tools/vms/一起安装的OpenSSHv6.7 一起使用 ,已经安装了OpenSSHv6.7。

    1. 它非常容易出错,您将需要对其进行大量自定义。

    2. 命令完成不起作用

    3. 当您在终端上移动光标时,它将留下空白

    4. Python不起作用

    5. OpenSSH的更高版本可能已对其进行了改进。进一步的MS似乎通过https://developer.microsoft.com/zh-cn/microsoft-edge/tools/vms/使OpenSSH可用Optional Features


-1

如果您碰巧在OSX上...

当我尝试使用username @ local:/ file_directory运行它时...

我收到以下错误:

ssh: local: node name or service name not known

在Mac上,我必须执行以下操作才能设置本地ssh

“系统偏好设置”->“互联网和网络”->“共享”-> 启用 “远程登录”

然后提供了username @ ip地址。


-1

我今天在MAC上也遇到了同样的问题。

键入以下命令:

scp /local-file-path/ /-remote-location-path/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.