我正在尝试在两个实例之间进行 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 标志来确认这一点)。
至少有两种方法可以解决这个问题:
简单的方法:
将您的文件通过 SCP 传输到您具有写权限的远程目录中(主目录(〜/)应该很好,如果没有,/tmp 目录几乎肯定可以工作,但不太安全),然后 SSH 进入并移动文件。
sudo scp -i /root/path/to/keypair.pem /root/path/to/local_file[电子邮件保护]:〜/路径/到/远程文件 ssh -i /root/路径/到/keypair.pem[电子邮件保护] sudo mv ~/路径/到/远程文件 /root/路径/到/远程文件 出口
更艰难的道路
可以通过 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 权限来执行您想做的事情。