.pem 文件对 SSH 和 SCP 的正确文件权限是什么

Geo*_*ter 99 ssh permissions

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

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

以下是我正在使用的命令:

SSH:

ssh -i sentiment.pem Todo@54.555.555.555
Run Code Online (Sandbox Code Playgroud)

从远程复制到本地计算机:

scp Todo@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal
Run Code Online (Sandbox Code Playgroud)

我使用的是 Mac OS X 10.7.5。


试错:

  1. 在我最初下载 .pem 文件后,它的权限被设置为,我认为:0644

    -rw-r--r--@ 1 Toga  staff  1692 Feb 18 21:27  sentiment.pem
    
    Run Code Online (Sandbox Code Playgroud)

    然后我尝试通过终端 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).
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我将文件权限更新为:

    chmod 660 sentiment.pem
    
    Run Code Online (Sandbox Code Playgroud)

    更新后,权限设置为:

    -rw-rw----@ 1 Toga  staff  1692 Feb 18 21:27 sentiment.pem
    
    Run Code Online (Sandbox Code Playgroud)

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

    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).
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我将文件权限更新为:

    chmod 600 sentiment.pem
    
    Run Code Online (Sandbox Code Playgroud)

    更新后,权限设置为:

    -rw-------@ 1 Toga  staff 1692 Feb 18 21:27 sentiment.pem
    
    Run Code Online (Sandbox Code Playgroud)

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

  4. 现在登录,我运行 a 命令将远程目录复制到我的本地计算机:

    scp Todo@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal
    
    Run Code Online (Sandbox Code Playgroud)

    返回:

    Permission denied (publickey).
    
    Run Code Online (Sandbox Code Playgroud)

尝试的 SCP 命令:

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

    scp -i sentiment.pem Todo@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加了 option -i,引用了该.pem文件,并将 AWS 的用户更改为ec2-user

    scp -i sentiment.pem ec2-user@54.555.555.555:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加了选项-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
    
    Run Code Online (Sandbox Code Playgroud)

Bab*_*ton 155

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

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

  1. 下载 .pem 文件。
  2. 在 Amazon Dashboard 中,从左侧栏中选择“Instances”,然后选择您要连接的实例。
  3. 单击“操作”,然后选择“连接”
  4. 单击“与独立 SSH 客户端连接”
  5. 打开终端窗口
  6. 创建目录:

    # mkdir -p ~/.ssh
    
    Run Code Online (Sandbox Code Playgroud)
  7. 将下载的 .pem 文件移动到我们刚刚创建的 .ssh 目录中:

    # mv ~/Downloads/ec2private.pem ~/.ssh
    
    Run Code Online (Sandbox Code Playgroud)
  8. 更改 .pem 文件的权限,以便只有 root 用户可以读取它:

    # chmod 400 ~/.ssh/ec2private.pem
    
    Run Code Online (Sandbox Code Playgroud)
  9. 创建一个配置文件:

    # vim ~/.ssh/config
    
    Run Code Online (Sandbox Code Playgroud)

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

    Host *amazonaws.com
    IdentityFile ~/.ssh/ec2private.pem
    User ec2-user
    
    Run Code Online (Sandbox Code Playgroud)

    保存那个文件。

  10. 使用带有公有 DNS 主机名的 ssh 命令连接到您的实例。
    例如:

    # ssh ec2-54-23-23-23-34.example.amazonaws.com
    
    Run Code Online (Sandbox Code Playgroud)


小智 31

chmod 400 {keyfile}.pem 是亚马逊指示的,它有效。

  • 这是我一直在寻找的答案,已接受答案中的所有说明都是很好的做法......但与问题无关。 (3认同)

小智 7

chmod 0400 pemfile.pem
Run Code Online (Sandbox Code Playgroud)

ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name
Run Code Online (Sandbox Code Playgroud)

  • 请解释您的 `ssh` 命令(如果可能,还提供参考)。顺便说一句,`chmod 400` 是在九个月前的回答中提供的。 (3认同)