我在这里浏览了其他问题以及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(表示您正在machineA上以localuser身份运行ssh命令)

使用scp时,远程端必须始终包含冒号(例如remotehost:/ tmp),否则它将仅执行普通复制(scp /tmp/foo.txt example.com会将/tmp/foo.txt复制到本地文件example.com)

删除-r标志,因为复制单个文件不需要此标志(用于递归复制目录)

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

#1 楼

您需要从本地计算机而不是远程计算机上运行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 ~/


评论


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

–dragonmnl
2014年2月17日下午16:19

#2 楼

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



将服务中的文件复制到本地目录:您必须在本地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



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



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

评论


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

–玉米
18年8月14日在19:57



#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要做的任何事情。

– Kusalananda♦
18年7月10日在9:31



#4 楼

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

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

评论


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

– terdon♦
2014年2月17日在16:10

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

–alexis
2014年2月17日下午16:15

#5 楼

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

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

#6 楼

将文件从Linux客户端复制到Linux服务器的解决方案


使用以下方法检查服务器上是否正在运行sshd
ps aux | grep sshd


如果否,请使用
OpenSSH
https://www.tecmint.com/install-openssh-server-in-linux/


重新安装服务器并安装sudo apt-get install openssh-server openssh-client验证sshd是否正在使用
ps aux | grep sshd


运行。如果需要,您可以配置/etc/ssh/sshd_config文件,但不是
简单配置所必需的

/>

使用netcat验证端口是否打开:
nc -v -z 127.0.0.1 22


要将文件从Linux客户端复制到Linux客户端,请使用scp作为按照
scp ~/filename.md username@10.22.33.45:~/folder/filename.md


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


解决方案将文件从Linux客户端复制到Windows


有多个客户端可在Windows上运行SSH服务器,例如:

来自MS的OpenSSH
Mob aSSH
Bitvise SSH服务器



安装上述服务器之一,并确保使用

netsh advfirewall firewall add rule name="SSH Port 22" dir=in action=allow protocol=UDP localport=22
netsh advfirewall firewall add rule name="SSH Port 22" dir=out action=allow protocol=UDP localport=22 
打开端口22 />
netsh advfirewall firewall add rule name="SSH Port 22" dir=in action=allow protocol=TCP localport=22
netsh advfirewall firewall add rule name="SSH Port 22" dir=out action=allow protocol=TCP localport=22


netsh advfirewall set allprofiles state off



这些服务器的比较:
Bitvise SSH服务器


提供几乎与本机cmd提示,powershell提示几乎相同的功能。
如果需要,可以提供其他自定义功能





出于简单需求的用户定制为0。花了很多时间尝试使MobaSSH
OpenSSH工作之后,我在
2分钟内就开始使用它。 />要使用scp复制文件,请使用:
scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md


个人免费,专业版$ 99。由于具有如此众多的功能和强大的集成性,因此价格物有所值。


MobaSSH:


在Windows上提供Linux外壳程序,在其中可以使用简单的Linux命令,例如lscpfind等,类似于MINGW64


,您可以通过直接访问cmdpowershell键入cmd
powershell


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


MobaSSH的优点在于它具有非常简单的
用户界面,并且scpssh并已很好地集成。因此,
可以用于简单的用例


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


使用安装了OpenSSHv6.7的Microsoft VM来自
https://developer.microsoft.com/zh-cn/microsoft-edge/tools/vms/,
OpenSSHv6.7已安装。


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


命令完成不起作用


您正在终端上移动光标


Python无法正常运行


OpenSSH的更高版本,可能已对其进行了改进。此外,MS似乎
通过“可选功能”使OpenSSH可用
https://developer.microsoft.com/zh-cn/microsoft-edge/tools/vms/





#7 楼

如果您恰巧在OSX上...

当我尝试使用username @ local:/ file_directory ...

运行它时,出现以下错误:

ssh: local: node name or service name not known


解决方案

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


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


然后提供了用户名@ip地址。

#8 楼

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

键入以下命令:

scp /local-file-path/ /-remote-location-path/