尽管能够通过 SSH 登录,但无法使用 SCP 将文件从本地计算机发送到服务器

尽管能够通过 SSH 登录,但无法使用 SCP 将文件从本地计算机发送到服务器

我正在尝试将文件从本地机器(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尝试连接sshroot@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不需要。)-rfile.zip

如果您成功登录,上述命令类似于scp您尝试通过 SSH 登录后将运行的命令。我们的解决方案是直接运行该命令。不同之处在于我们的以您当前的用户身份运行,而您的尝试要求以 root 身份运行。我不知道您当前的用户是否是 root;可能不是,而且这种差异可能很重要,也可能不重要。继续阅读。root@my_ipscpscp


关于 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;这正是本答案上一节中给出的解决方案。

相关内容