使用scp将文件复制到亚马逊EC2实例?

281

我正在尝试使用我的Mac终端将一个文件(我从网上下载的phpMyAdmin)从Downloads文件夹传输到我的亚马逊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:没有这样的文件或目录。 权限被拒绝(publickey)。 连接丢失

我的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 不可访问:没有这样的文件或目录。 权限被拒绝(publickey)。 连接丢失

请问有人能告诉我如何解决这个问题吗?

p.s. 这里有一个类似的帖子:scp (secure copy) to ec2 instance without password,但它没有回答我的问题。


我觉得当我在亚马逊实例上线时,我无法再访问我的本地下载文件了。 - HoKy22
18个回答

542

尝试指定用户为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:~/.

请查看使用SSH连接 Linux/UNIX 实例


28
运行良好。请注意,如果您正在运行Ubuntu实例,则您的默认用户可能是“ubuntu”。 - RussellStewart
当然,复制到 / 可能不起作用。感谢您的启示! - dnuske
为什么它提示请使用用户“ubuntu”登录,而不是用户“root”。我需要做什么来复制? - Arjun
在我的情况下,我正在使用用户,但是不同的地方是我添加了公共DNS mec2-50-17-16-67.compute-1.amazonaws.com 而不是域名。 - shareef
我不得不调整本地文件名和连接字符串,像这样 scp -i myAmazonKey.pem ubuntu@mec2-50-17-16-67.compute-1.amazonaws.com:~/log.tar.gz log.tar.gz - openwonk
显示剩余3条评论

65

第二个目录是您的目标路径,请勿在此处使用服务器名称。换句话说,您无需提及当前所在机器的机器名称。

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

如果是目录,则使用-r选项。


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

27

为了使SSH正常工作,您的密钥不能公开可见。如有需要,请使用以下命令:

chmod 400 yourPublicKeyFile.pem

18
你应该在本地机器上尝试上述 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:~/.

12

以下是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实例目标结尾处的:〜

10
我曾遇到过同样的问题,我的解决方法是:

scp -i /path/pem -r /path/file/ ec2-user@public aws dns name: (这里不需要填写)

一旦您完成了上面这个步骤,进入SSH服务器并将文件移动到所需位置。


10

这对我很有用。我结合了其他两个回答来解决这个问题。

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。 - Thorvald

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 .


你怎么知道你的ubuntu@XX.XXX.XXX.XXX是什么?我用的是Windows。 - jryan14ify

7
以下SCP格式适用于我:
scp -i /path/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com:~/SampleFile.txt ~/SampleFile2.txt

样本文件.txt:它将是您根目录的路径(在我的情况下,/home/ubuntu)。 在我的情况下,我想要下载的文件位于/var/www。

样本文件2.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

6
scp -i ~/path to pem file/file.pem -r(for directory) /PATH OF LOCAL/localfile user@hostname:PATH OF SERVER/serverdirectory

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