【问题标题】:Using scp to copy a file to Amazon EC2 instance?使用 scp 将文件复制到 Amazon EC2 实例?
【发布时间】:2012-07-08 10:27:59
【问题描述】:

我正在尝试使用我的 Mac 终端将文件从下载(我在线下载的 phpMyAdmin)scp 到我的 Amazon EC2 实例。

我使用的命令是:

scp -i myAmazonKey.pem phpMyAdmin-3.4.5-all-languages.tar.gz  hk22@mec2-50-17-16-67.compute-1.amazonaws.com:~/.

我得到的错误: 警告:身份文件 myAmazonKey.pem 无法访问:没有这样的文件或目录。 权限被拒绝(公钥)。 失去连接

我的 myAmazonkey.pem 和 phpMyAdmin-3.4.5-all-languages.tar.gz 都在下载中,所以我尝试了

scp -i /Users/Hello_Kitty22/Downloads/myAmazonKey.pem /Users/Hello_Kitty22/Downloads/phpMyAdmin-3.4.5-all-languages.tar.gz  hk22@mec2-50-17-16-67.compute-1.amazonaws.com:~/.

我得到的错误是: 警告:身份文件 /User/Hello_Kitty22/Downloads/myAmazonkey.pem 无法访问:没有这样的文件或目录。 权限被拒绝(公钥)。 失去连接

谁能告诉我如何解决我的问题?

附言有一个类似的帖子:scp (secure copy) to ec2 instance without password 但它没有回答我的问题。

【问题讨论】:

  • 我感觉当我在线启动我的 Amazon 实例时,我无法再在下载中访问我的本地文件了

标签: amazon-ec2 terminal copy scp public-key


【解决方案1】:

尝试将用户指定为ec2-user,例如

scp -i myAmazonKey.pem phpMyAdmin-3.4.5-all-languages.tar.gz ec2-user@mec2-50-17-16-67.compute-1.amazonaws.com:~/.

Connecting to Linux/UNIX Instances Using SSH

【讨论】:

  • 效果很好。请注意,如果您正在运行 ubuntu 实例,您的用户默认用户可能是“ubuntu”。
  • 当然复制到 / 可能不起作用。谢谢指教!
  • @DanielDropik 我不知道你是不是在开玩笑......但是:/ 会尝试将文件夹复制到系统的根目录,这会在所有机器上出现权限错误而没有运行 sudo(或以 root 身份)。
  • 为什么说请以用户“ubuntu”而不是用户“root”登录。我需要做什么来复制
  • 在我的情况下,我使用的是用户,但不同之处在于我添加了公共 dns mec2-50-17-16-67.compute-1.amazonaws.com 而不是域名
【解决方案2】:

第二个目录是你的目标,不要在那里使用服务器名称。换句话说,您不需要提及您当前所在机器的机器名称。

scp -i /path/to/your/.pemkey -r /copy/from/path user@server:/copy/to/path

-r 如果是目录。

【讨论】:

  • 非常感谢您。这是唯一对我有用的解决方案。
  • scp -i "xyz.pem" -r file_xyz.zip user@server.region.compute.amazonaws.com:/path/
【解决方案3】:

您的密钥不得公开查看,SSH 才能正常工作。如果需要,请使用此命令:

chmod 400 yourPublicKeyFile.pem

【讨论】:

  • 你救了我的一天兄弟
【解决方案4】:

您应该在本地计算机上尝试上述 scp 命令。

在您的本地机器上尝试:

scp -i ~/Downloads/myAmazonKey.pem ~/Downloads/phpMyAdmin-3.4.5-all-languages.tar.gz  hk22@mec2-50-17-16-67.compute-1.amazonaws.com:~/.

【讨论】:

    【解决方案5】:

    以下是适用于 EC2 实例的详细信息:

    scp -i /path/to/whatever.pem /users/me/path-to-file ec2-user@ec2-55-55-555-555.compute-1.amazonaws.com:~
    

    开头的几点说明:

    1. 注意-i后面给出的三个参数之间的空格
    2. scp 代表安全复制协议。知道单词可以更容易记住命令。
    3. -i 指示您需要将 .pem 文件作为下一个参数。如果没有-i,则不需要.pem
    4. 注意 EC2 实例目标末尾的 :~

    【讨论】:

      【解决方案6】:

      我遇到了完全相同的问题,我的解决方案是

      scp -i /path/pem -r /path/file/ ec2-user@public aws dns name:(此处留空)

      完成此部分后,进入 ssh 服务器和 mv 文件到所需位置

      【讨论】:

        【解决方案7】:
        scp -i ~/path to pem file/file.pem -r(for directory) /PATH OF LOCAL/localfile user@hostname:PATH OF SERVER/serverdirectory
        

        【讨论】:

          【解决方案8】:

          将文件从本地发送到服务器:

          scp -i .ssh/awsinstance.pem my_local_file ubuntu@XX.XXX.XXX.XXX:/home/ubuntu

          从服务器下载文件到本地:

          scp -i .ssh/awsinstance.pem ubuntu@XX.XXX.XXX.XXX:/home/ubuntu/server_file .

          【讨论】:

            【解决方案9】:

            这对我有用。我对这个问题使用了其他两个答案的组合。

            scp -i /Users/me/documents/myKP.pem -r /Users/me/desktop/testDir \
                   ec2-user@ec2-11-111-11-11.compute-1.amazonaws.com:/home/ec2-user/remoteDir
            

            “ec2-user@ec2-11-111-11-11.compute-1.amazonaws.com”是从您的 ec2 实例的公共 DNS 复制并粘贴的。

            【讨论】:

            • 这对我有用,而其他答案由于某种原因没有效果。不知道是什么问题。 Ubuntu 20.04 到 ubuntu 20.04。
            【解决方案10】:

            以下 SCP 格式适用于我

            scp -i /path/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com:~/SampleFile.txt ~/SampleFile2.txt
            

            SampleFile.txt:它将是您的根目录的路径(在我的例子中是 /home/ubuntu)。就我而言,我想下载的文件位于 /var/www

            SampleFile2.txt:它将是您机器根路径的路径(在我的例子中,/home/MyPCUserName)

            所以,我必须在下面写命令

            scp -i /path/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com:~/../../var/www/Filename.zip ~/Downloads
            

            【讨论】:

              【解决方案11】:

              this video 中逐步介绍了使用 SCP 将文件从本地计算机复制到 AWS EC2 Linux 实例的过程(包括以下几点)。

              要纠正这个使用 SCP 的特殊问题:

              1. 您需要指定正确的 Linux 用户。来自Amazon

                • 对于 Amazon Linux,用户名为 ec2-user。
                • 对于 RHEL,用户名为 ec2-user 或 root。
                • 对于 Ubuntu,用户名为 ubuntu 或 root。
                • 对于 Centos,用户名为 centos。
                • 对于 Fedora,用户名为 ec2-user。
                • 对于 SUSE,用户名为 ec2-user 或 root。
                • 否则,如果 ec2-user 和 root 不起作用,请咨询您的 AMI 提供商。
              2. 您的私钥不得公开可见。运行以下命令,只有root用户才能读取文件。

                chmod 400 /path/to/yourKeyFile.pem
                

              【讨论】:

                【解决方案12】:
                1. 公共 DNS

                  scp -i /path/my-key-pair.pem /path/my-file.txt ec2-user@my-instance-public-dns-name:path/
                  
                2. (IPv6)

                   scp -i /path/my-key-pair.pem /path/my-file.txt ec2-user@\[my-instance-IPv6-address\]:path/
                  

                【讨论】:

                • 对我有用,哈哈,我实际上使用 ~/path 来定位它
                【解决方案13】:

                检查 .pem 文件的权限...openssh 通常不喜欢世界可读的私钥,并且会失败(iir,scp 不能很好地向用户提供此反馈)。

                您可以简单地使用该密钥 ssh 到您的 AWS 主机吗?

                【讨论】:

                • 是的,我可以使用该密钥 SSH 到我的 AWS 主机。事实上,我遇到的问题是,我在亚马逊主机上(通过 ssh),所以当我执行 cd 时,我只能看到我的亚马逊服务器上的文件,而不是我保存 pem 文件的本地 Mac 下载目录.当我退出我的 ec2 主机时,我只能 cd 到我的本地 Mac 下载目录。但是如果我退出到我的 ec2 主机,我无法将文件 phpMyAdmin 上传到我的 ec2 服务器。我pem的权限是400,我觉得还可以。
                • 非常感谢您的帮助,我通过您提出的最后一个问题找到了我的问题。看来我可以 ssh 或 scp,而不是两个一起。
                • 感谢 hellokitty22 的提示。我有两个终端,一个用于 ssh,一个用于 scp。
                【解决方案14】:

                首先您应该将.pem 文件的模式从读写模式更改为只读模式。这可以通过终端sudo chmod 400 your_public_key.pem中的单个命令来完成@

                【讨论】:

                  【解决方案15】:

                  我尝试了上面提到的所有建议,但没有任何效果。我终止了当前实例,启动了另一个实例并重复了相同的过程。这次没有问题。有时这可能是远程 ami 的错。

                  【讨论】:

                    【解决方案16】:

                    SCP推荐

                    将文件从本地发送到远程服务器

                    sudo scp -i ../Downloads/new_bb_key.pem ./dump.zip ubuntu@13.127.124.129:~/.

                    将文件从远程服务器发送到本地

                    sudo scp -i ~/Downloads/new_bb_key.pem ubuntu@13.127.124.129:/home/ubuntu/LatestDBdump.zip 下载/

                    【讨论】:

                      【解决方案17】:

                      我会使用:

                      scp -i "path to .pem file" "file to be copeide from local machine" username@amazoninstance: 'destination folder to copy file on remote machine'

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2018-11-25
                        • 2013-10-06
                        • 2014-12-16
                        • 2016-10-17
                        • 2011-09-27
                        • 2013-07-01
                        • 1970-01-01
                        • 2020-12-03
                        相关资源
                        最近更新 更多