我正在尝试将文件从本地机器(Ubuntu)发送到 Oracle VM(Oracle Linux)。
我尝试过的命令如下,但它不起作用。
我可以使用 SSH 正常连接到服务器。
scp -r -i /full_path_to_the_private_key/priv-key.key root@my_ip:/tmp/file.zip opc@server_ip:/tmp
root@my_ip's password:
Permission denied, please try again.
root@my_ip's password:
Permission denied, please try again.
root@my_ip's password:
root@my_ip: Permission denied (publickey,password).
答案1
总结
要引用“来自本地机器的文件”,请使用/tmp/file.zip
而不是root@my_ip:/tmp/file.zip
。
分析
我正在尝试将文件从本地机器(Ubuntu)发送到 Oracle VM(Oracle Linux)。
[…]
scp […] root@my_ip:/tmp/file.zip opc@server_ip:/tmp
root@my_ip:…
scp
要处理类似于运行ssh
到运行的地址scp
(请参阅“幕后发生了什么”这个答案;但请注意,它不分析两个远程地址的情况)。
我理解my_ip
指的是您的本地机器,但root@my_ip:…
正式来说不是本地路径。您的scp
尝试连接ssh
到root@my_ip
并在那里运行scp
;这是失败的连接。如果成功,另一个scp
将读取/tmp/file.zip
。
解决方案
scp
完全能够读取本地文件而无需ssh
从本地到本地;只需给它一个本地路径:
scp -i /full_path_to_the_private_key/priv-key.key /tmp/file.zip opc@server_ip:/tmp
这是本地路径。(请注意,我认为在传输常规文件时/tmp/file.zip
不需要。)-r
file.zip
如果您成功登录,上述命令类似于scp
您尝试通过 SSH 登录后将运行的命令。我们的解决方案是直接运行该命令。不同之处在于我们的以您当前的用户身份运行,而您的尝试要求以 root 身份运行。我不知道您当前的用户是否是 root;可能不是,而且这种差异可能很重要,也可能不重要。继续阅读。root@my_ip
scp
scp
关于 root
仅当您无法以当前用户身份访问文件时,指定作为 rootroot@my_ip:/tmp/file.zip
访问的一种(繁琐的)方式才有意义。有更好的方法可以以 root 身份访问文件。/tmp/file.zip
一种直接的方法是sudo
:
sudo scp … /tmp/file.zip opc@server_ip:/tmp
但是它将scp
以 root 身份运行整个程序。这不仅仅是以 root 身份访问文件,因为现在一切 scp
确实会(或至少可以)以 root 身份执行。考虑到scp
您尝试的命令(如果一切正常)将scp
在登录(正式远程)后运行另一个命令root@my_ip
,并且它会执行此操作以 root 身份,无论如何,您都尝试以 root 身份运行(某些)scp
。换句话说,sudo scp …
这(几乎)等同于如果您能够连接到 时将发生的情况root@my_ip
。
sudo
不过,仅当您无法以普通用户身份访问文件时,才需要使用(或其他方式)以 root 身份访问文件。如果您(作为当前用户)可以简单地访问该文件,那么您应该直接调用scp
并告诉它通过其本地路径读取该文件/tmp/file.zip
;这正是本答案上一节中给出的解决方案。