28

我正在尝试将文件传输到 ec2 实例。我遵循了亚马逊的文档,这就是我的命令的样子:

scp -i [the key's location] Documents/[the file's location] ec2-user@[public dns]:[home/[destination]]

我用正确的东西替换了所有变量,我确定它是正确的密钥并且它具有 400 权限。当我调用命令时,它会告诉我 RSA 密钥指纹,询问我是否要继续连接。我输入是,它回复

Permission denied (publickey,gssapi-with-mic)
lost connection

我查看了许多其他关于堆栈溢出的类似问题,但找不到正确的方法。

端口 22 上也启用了 ssh 流量。

4

5 回答 5

22

亚马逊提供的示例是正确的。这听起来像一个文件夹权限问题。如果您创建了您尝试复制到的文件夹与其他用户或其他用户创建了它,您可能没有复制或编辑它的权限。

如果您有 sudo 能力,您可以尝试为自己打开访问权限。虽然不建议以这种方式离开,但您可以尝试以下命令:

sudo chmod 777 /folderlocation

这为任何人提供了完整的读/写/可执行权限(因此为什么您不应该将其保留在 777),但它会让您有机会测试您的 scp 命令以排除权限。

之后,如果您不熟悉权限,我建议您阅读它。这是一个示例:http ://www.tuxfiles.org/linuxhelp/filepermissions.html通常建议您根据其中保存的信息类型尽可能锁定文件夹。

如果这不是原因,您可能需要检查其他一些事情:

  • 执行“scp -i keyname”命令时,您是否在您的密钥目录中?
  • 您是否有权使用要从中传输的文件夹?

祝你好运。

于 2013-07-03T14:08:55.983 回答
12

问题可能是用户名。我将一个文件复制到我的 Amazon 实例并首先尝试使用以下命令:

scp -r -i ../.ssh/Amazon_server_key_pair.pem ./empty.test ec2-user@ec2-xx-yy-zz-tt.compute-1.amazonaws.com:~

并得到错误:权限被拒绝(公钥)。

然后我意识到我的实例是一个 Ubuntu 环境,然后用户用户是“ubuntu”,对我有用的正确命令是:

scp -r -i ../.ssh/Amazon_server_key_pair.pem ./empty.test ubuntu@ec2-xx-yy-zz-tt.us-west-2.compute.amazonaws.com:~

文件“empty.test”是一个包含文本“testing ...”的文本文件。将虚拟服务器的地址替换为实例公共 DNS 的正确地址。我已经用 xx.yy.zz.tt 替换了我的实例的 ip。

于 2016-02-20T20:29:41.487 回答
5

我必须使用 ubuntu@ 而不是 ec2-user@ 因为当我 ssh 我在终端中看到 ubuntu@ 时,尝试更改为您在终端上看到的名称

您还必须在计算机中设置 pem 文件的权限

chmod 400 /path/my-key-pair.pem

下面的代码会将文件从您的计算机复制到 Ec2 实例。

scp -i ~/location_of_your_ec2_key_pair.pem ~/location_of_transfer_file/sample.txt ubuntu@ec2_your_ec2_instance.compute.amazonaws.com:~/folder_to_which_it_needs_to_be_copied

下面的代码会将文件从 Ec2 实例复制到您的计算机

scp -i ~/location_of_your_ec2_key_pair.pem   ubuntu@ec2_your_ec2_instance.compute.amazonaws.com:~/location_of_transfer_file/sample.txt ~/folder_to_which_it_needs_to_be_copied
于 2018-08-31T10:04:13.493 回答
0

可能是那些使用错误的用户名。发生在我身上的是同样的错误消息 - >权限被拒绝(公钥,gssapi-keyex,gssapi-with-mic)。失去了连接

于 2015-05-22T13:31:49.960 回答
0

我面临着同样的问题。希望这对你有用。

scp -rp -i yourfile.pem ~/local_directory username@instance_url:directory

进行这项工作的权限也应该是正确的。

于 2019-06-11T13:20:09.493 回答