使用scp将文件传输到Amazon EC2实例时,总是提示权限被拒绝(publickey,gssapi-with-mic)。

28

我正在尝试将一个文件传输到EC2实例。 我按照Amazon的文档进行操作,下面是我的命令:

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

我把所有变量替换成正确的内容,确信这是正确的密钥并且具有400的权限。当我调用命令时,它会告诉我RSA密钥指纹,并问我是否想要继续连接。我输入yes后,它回复说:

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

我查看了许多其他类似的stackoverflow问题,但找不到正确的方法来完成它。

另外,端口22上启用了SSH流量。


1
我发现我的错误在于一开始使用了用户的名称(在这种情况下是seqware),而不是ec2-user,这给了我相同的结果,但当我将其替换为root@publicdns时,它就可以工作了。 - Amre
7个回答

22

亚马逊提供的示例是正确的。听起来像是一个文件夹权限问题。如果您正在尝试复制到的文件夹是由另一个用户创建的,那么很可能您没有复制或编辑该文件夹的权限。

如果您有sudo权限,您可以尝试为自己打开访问权限。虽然不建议保持此状态,但您可以尝试使用以下命令:

sudo chmod 777 /folderlocation

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

如果您对权限不熟悉,我建议您加强学习。这里是一个例子:http://www.tuxfiles.org/linuxhelp/filepermissions.html 根据所保存的信息类型,通常建议尽可能地锁定文件夹。

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

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

祝你好运。


12

问题可能在于用户名。我将文件复制到我的Amazon实例中,首先尝试使用命令:

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

并且收到错误提示:Permission denied (publickey)。

然后我意识到我的实例是一个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。


对我来说,我忘记在我的公共 DNS 前面添加 'ec2-user'。 - Jghorton14

7

我必须使用ubuntu@而不是ec2-user@,因为在我的终端上看到的是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

正是我正在寻找的。 - Shamoon97

1
我曾经也遇到过相同的问题。希望这个方法对你有用。 scp -rp -i yourfile.pem ~/local_directory username@instance_url:directory 同时,权限设置也需要正确才能使此方法生效。

0

可能是使用了错误的用户名。我也遇到过同样的错误消息 -> 权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)。 连接丢失


0

scp -i [密钥位置] Documents/[文件位置] ec2-user@[公共 DNS]:home/[目标]/** 你可以在最后添加 ** 并尝试更改目标目录的权限

这对我有用


0

在我的情况下,我是从错误的位置运行命令,也就是说我是从一个与我远程的AWS机器保持连接的终端而不是本地机器上运行scp

因此,在以上所有好的提示之外,检查一下当前要运行命令的机器,如果是远程机器,请先关闭当前会话exit,然后考虑之前其他人所说的一切再运行scp命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接