我正在尝试将文件传输到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流量。
答案 0 :(得分:19)
亚马逊提供的示例是正确的。这听起来像文件夹权限问题。如果您创建的文件夹是您尝试复制到另一个用户或其他用户创建的文件夹,则您可能无权复制或编辑它。
如果您有sudo功能,可以尝试自己打开访问权限。虽然不建议这样做,但您可以尝试以下命令:
sudo chmod 777 /folderlocation
这为任何人提供了完整的读/写/可执行权限(因此你不应该将其留在777),但它会让你有机会测试你的scp命令以排除权限。
如果您不熟悉权限,我建议您仔细阅读。这是一个示例:http://www.tuxfiles.org/linuxhelp/filepermissions.html通常建议您尽可能地锁定文件夹,具体取决于其中保存的信息类型。
如果这不是您可能想要检查的其他一些原因:
答案 1 :(得分:7)
问题可能是用户名。我将文件复制到我的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"是一个包含文本"测试..."的文本文件。使用正确的地址替换虚拟服务器的地址到您的实例的公共DNS。我用xx.yy.zz.tt替换了ip到我的实例。
答案 2 :(得分:3)
我必须使用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
答案 3 :(得分:0)
可能会使用错误的用户名。发生在我身上,是同样的错误消息 - >权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)。 失去联系
答案 4 :(得分:0)
我面临着同样的问题。希望这对您有用。
scp -rp -i yourfile.pem ~/local_directory username@instance_url:directory
权限也应该正确才能完成此工作。