我尝试通过SSH进入我的AWS Ubuntu服务器并将目录复制到本地计算机。在整个过程中,我遇到不同的文件权限错误(如下所示)。

.pem文件是否需要一个特定的文件许可权,以允许我使用SSH和SCP?
还是我需要两次更改文件许可权-一次用于SSH,另一次用于SCP登录后?

这是我使用的命令:


ssh -i sentiment.pem Todo@54.555.555.555


从远程本地计算机,具有:

scp Todo@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal


我在Mac OS X 10.7.5上。


尝试和错误:



我最初下载.pem文件后,其权限被设置为I THINK:0644

-rw-r--r--@ 1 Toga  staff  1692 Feb 18 21:27  sentiment.pem


然后我尝试通过终端进行SSH并收到以下消息:

WARNING: UNPROTECTED PRIVATE KEY FILE! 
Permissions 0644 for 'sentiment.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: sentiment.pem
Permission denied (publickey).



我将文件权限更新为:

chmod 660 sentiment.pem


更新后,权限设置为:

-rw-rw----@ 1 Toga  staff  1692 Feb 18 21:27 sentiment.pem


然后我尝试通过终端进行SSH并收到以下消息: br />
WARNING: UNPROTECTED PRIVATE KEY FILE! 
Permissions 0660 for 'sentiment.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: sentiment.pem
Permission denied (publickey).



我将文件权限更新为:

chmod 600 sentiment.pem

更新后,权限设置为:

-rw-------@ 1 Toga  staff 1692 Feb 18 21:27 sentiment.pem


然后我尝试通过终端进行SSH并成功!!


现在登录,我运行以下命令将远程目录复制到本地计算机:

scp Todo@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal


返回哪个: />
Permission denied (publickey).




尝试的SCP命令:



添加了选项-i并引用了.pem文件:

scp -i sentiment.pem Todo@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal



添加了选项-i,引用了.pem文件,并将AWS的用户更改为ec2-user

scp -i sentiment.pem ec2-user@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal



添加了选项-i,引用了.pem文件,将AWS的用户更改为ec2-user,并添加了.pem文件位置的完整文件路径:

scp -i /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem ec2-user@54.555.555.555:/home/ubuntu/sentiment /Users/Toga/Desktop/sentimentlocal




评论

您必须告诉scp也使用.pem文件

感谢您指出@danielkullmann这是有道理的。我尝试了直接引用.pem文件的命令组合,但是什么都没有起作用。我用标题为“尝试的SCP命令”的部分更新了问题,以对我尝试过的内容进行分类。如果您有其他命令,请告诉我。谢谢。

#1 楼

请访问此处如何使用SSH远程连接到Amazon EC2
或参考以下内容。

如何使用SSH远程连接到Amazon EC2:


下载.pem文件。
在Amazon Dashboard中,从左侧栏中选择“实例”,然后选择您要连接的实例。
单击“操作”,然后选择“连接”
单击“连接独立的SSH客户端”
打开终端窗口

创建目录:

# mkdir -p ~/.ssh



将下载的.pem文件移动到我们刚刚创建的.ssh目录中:

# mv ~/Downloads/ec2private.pem ~/.ssh



更改.pem文件的权限,以便只有root用户才能读取它:

# chmod 400 ~/.ssh/ec2private.pem



创建配置文件:

# vim ~/.ssh/config


在该配置文件中输入以下文本:

Host *amazonaws.com
IdentityFile ~/.ssh/ec2private.pem
User ec2-user


保存该文件。


在公共场合使用ssh命令连接到您的实例的DNS主机名。
例如:

# ssh ec2-54-23-23-23-34.example.amazonaws.com




评论


极好的答案。为了避免移动pem,可以使用ssh -i标志指定要使用的公钥。例如:ssh -i path / to / ec2private.pem ec2-54-23-23-23-34.example.amazonaws.com

– Mafro34
2015年2月11日在17:23

#2 楼

chmod 400 {keyfile}.pem是亚马逊指示的内容,并且可以正常工作。

评论


这是我一直在寻找的答案,被接受的答案中的所有说明都是很好的做法……但与问题无关。

–缩小
18年5月16日在18:09

#3 楼

chmod 0400 pemfile.pem




ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name


评论


请解释您的ssh命令(并在可能的情况下提供参考)。顺便说一句,chmod 400是在九个月前的一个答案中提供的。

–斯科特
2014年11月24日23:05

在ssh -i _private.pem root @ ip之后为我工作

–母系
19年12月8日在17:25

#4 楼

似乎您不应使用IP地址,而应使用SCP命令中系统的完整主机名。 AWS文档在http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html下的“使用SCP从Linux / Unix将文件传输到Linux / Unix实例”部分下对此进行了描述。

并使用-r复制目录。

请注意,不同图像的默认用户名有所不同:


对于Amazon Linux,默认用户名用户名是ec2-user。对于RHEL5,用户名通常是root,但可能是ec2-user。对于Ubuntu,用户名为ubuntu。对于SUSE Linux,用户名是root。否则,请咨询您的AMI供应商。


因此,请使用以下命令:

scp -r -i  /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem ubuntu@ec2-xx-xx-xx-xx.compute-x.amazonaws.com:~/sentiment /Users/Toga/Desktop/sentimentlocal


评论


一个不错的提示提醒我使用正确的用户名。出现上述错误,我需要记住在ubuntu实例上使用ubuntu用户。

–md_rasler
19年4月16日在16:01

#5 楼

“权限被拒绝(公用密钥)”来自远程服务器,因此您使用的密钥错误,不允许连接或远程authorized_keys文件中有错字。

#6 楼

我通过在命令中添加“ sudo”来修复它

chmod 0400 pemfile.pem


然后运行

sudo ssh -i "your-file.pem" ubuntu@your-dns.compute.amazonaws.com