如何将 SCP 密钥对从一个 Amazon EC2 实例传输到另一个实例?

如何将 SCP 密钥对从一个 Amazon EC2 实例传输到另一个实例?

我正在尝试在两个实例之间进行 SCP 认证,但遇到了一些问题。以下是我正在输入的内容。

[ec2-user@ip-xxx-xx-xx-xx ~] scp -i .ssh/key.pem /root/.ssh/id_rsa.pub 10.xxx.xx.xxx:/root/.ssh/authorized_keys2

返回

/root/.ssh/id_rsa.pub: Permission denied

我尝试了 sudo,但 EC2 告诉我必须以 ec2-user 身份登录才能使用此命令。我做错了什么?

答案1

在您的场景中,需要考虑两组权限 - 一组在本地计算机上,一组在远程计算机上。ec2-user 无权访问本地计算机上的 /root 文件夹。使用sudo可解决此问题。但是,您以非 root 用户身份登录到远程计算机,并且您无权写入 /root 文件夹。这就是您看到的错误的原因。(您可以通过在 scp 命令中添加 -v 标志来确认这一点)。

至少有两种方法可以解决这个问题:

  1. 简单的方法:

    将您的文件通过 SCP 传输到您具有写权限的远程目录中(主目录(〜/)应该很好,如果没有,/tmp 目录几乎肯定可以工作,但不太安全),然后 SSH 进入并移动文件。

    sudo scp -i /root/path/to/keypair.pem /root/path/to/local_file[电子邮件保护]:〜/路径/到/远程文件
    ssh -i /root/路径/到/keypair.pem[电子邮件保护]
    sudo mv ~/路径/到/远程文件 /root/路径/到/远程文件
    出口
  2. 更艰难的道路

    可以通过 SSH 传输文件,并使用此 SSH 连接在远程计算机上执行 sudo,但是,远程计算机需要允许这样做。默认情况下,在 Amazon 的 Linux 上(您似乎正在使用您的用户名运行),您无法在没有 tty 的情况下运行 sudo。要更改此设置,请在远程计算机上运行visudo并注释掉Defaults requiretty(第 56 行),然后保存文件。之后,您可以:

    通过 SSH 传输您的密钥(注意,您仍然需要 sudo 来读取本地文件):

    sudo cat /root/path/to/local_file | ssh -v -i /root/path/to/keypair.pem[电子邮件保护]“sudo bash -c‘cat - > /root/path/to/remote_file’”

    或者,通过 SSH 重定向您的密钥(sudo 仅适用于命令的第一部分,因此您要么成为 root,要么将整个命令放在脚本中并使用 sudo):

    sudo-i
    ssh -i /root/路径/到/keypair.pem[电子邮件保护]sudo sh -c'“cat > /root/path/to/remote_file”'</root/path/to/local_file
    出口

(有些程序似乎能够“通过 scp 登录后执行 sudo”(例如 WinSCP),但是我不知道如何通过 scp 运行命令 - 也许在这些情况下使用 SSH 来传输文件)

另一种方法是允许在远程计算机上以 root 身份登录,然后通过 SCP 直接以 root 身份登录(本地仍然使用 sudo)。完成更改后,撤消使用 visudo 所做的任何更改。

答案2

此错误意味着您无法读取指示的文件。

/root/.ssh/id_rsa.pub: Permission denied

你可以试试sudo scp ...

答案3

以 root 身份尝试此操作(su如果您未以 root 身份登录,请先运行):

ssh-copy-id 10.xxx.xx.xxx

看起来 EC2 不希望您以 root 身份登录。您能以 ec2-user 身份完成您想做的事情吗?如果可以:

ssh-copy-id [email protected]

如果没有,您可以 1) 编辑 /etc/ssh/sshd_configPermitRootLogin yes并重新启动 sshd 或 2) 授予 ec2-user 权限来执行您想做的事情。

相关内容