我正在使用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:没有这样的文件或目录
〜/
外壳“卡住”了任何建议吗?
#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命令,例如
ls
,cp
,find
等,类似于MINGW64
,您可以通过直接访问
cmd
和powershell
键入cmd
或powershell
Unicode支持很差。编码不正确。例如,如果您
尝试启动
Python
解释器,它将崩溃。您需要使用
(https://stackoverflow.com/a/12834315/4752883)手动更改编码:
chcp 65001
set PYTHONIOENCONDING=utf-8
,然后启动Python提示
MobaSSH的优点在于它具有非常简单的
用户界面,并且
scp
和ssh
并已很好地集成。因此,可以用于简单的用例
将文件从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/
评论
尚不清楚您的问题是否仅与位于错误的计算机上有关...请问您可以在每个命令前面加上正在运行的主机吗?例如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命令?如果您在本地计算机上,这将很有意义。