TL;DR
我从一台远程服务器(设置为)rsync
将几个目录添加到我的新 AWS EC2 实例。现在由于出现错误,我无法将其添加到其中。/home/ubuntu
777
ssh
Permission denied (publickey)
我正在将生产环境从 SoftLayer 迁移到 AWS。
我必须将rsync
几个目录转移到 EC2(EBS),在此过程中,我确实将一些目录从旧目录转移/home/ubuntu/
到了我当前的 EC2 实例/home/ubuntu/
。
我的rsync
命令(关于目的地)看起来像这样。
ubuntu@[aws.remote.ec2]:~$ sudo rsync --include 'dir1' --include '*.sh' --include '.py' --include 'api_logs' --include 'database_backups' --exclude '*' -avz -e "ssh -p $portNumber" ubuntu@[softlayer.remote]:/home/ubuntu/ /home/ubuntu/
ssh
文件已成功传输。当我下次尝试进入我的 EC2 时,我得到了Permission denied (publickey)
以下日志,其中包含以下ssh -v
选项:(我在下面的日志中使用 {} 屏蔽了 IP 等私人信息)
OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /home/{localuser}/.ssh/config
debug1: /home/{localuser}/.ssh/config line 1: Applying options for aws-fr-
ec2
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to {aws.ec2.ip} [{aws.ec2.ip}] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/{localuser}/Documents/AWS-Files/EC2-FR.pem type
-1
debug1: key_load_public: No such file or directory
debug1: identity file /home/{localuser}/Documents/AWS-Files/EC2-FR.pem-cert
type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2
Ubuntu-4ubuntu2.2
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 pat OpenSSH* compat
0x04000000
debug1: Authenticating to {aws.ec2.ip}:22 as 'ubuntu'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC:
<implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC:
<implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256
SHA256:g3nWVGmjJYVrNrwsDJMhzbLSw0FzBOLoUx80seD9qIs
debug1: Host '{aws.ec2.ip}' is known and matches the ECDSA host key.
debug1: Found key in /home/{localhost}/.ssh/known_hosts:11
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/{localhost}/Documents/AWS-Files/EC2-
FR.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).
我确实偶然发现了这问题,但没有帮助。我还发现这AWS 论坛上的主题。
我确实遵循了列出的步骤:
发布者:mary@AWS:
您能否验证此实例上 /home/ubuntu/.ssh 目录及其所含文件的权限?
要验证权限,您可以停止实例并分离根卷(记下它所附加到的设备)。然后将卷附加到可用设备上的另一个实例。如果需要,创建一个挂载点(例如 /fixroot),并将设备挂载到此挂载点。挂载后,cd 到 /fixroot/home/ec2-user 并检查目录和文件权限。.ssh 目录应允许用户(所有者)读写,并且文件应仅由用户读取。
在那里要检查的另一件事是,known_hosts 文件没有您尝试连接的客户端的重复条目。
完成此操作后,您可以卸载卷并将其与实例分离。然后将其重新附加到您在第一步中记下的设备的原始实例并启动实例。
也
发布者:yromanenko:
原来是 home/ubuntu 文件夹的权限太宽松了,而不是 ssh。我可以通过分离根卷并修复权限来修复它。以下视频非常有助于指导我完成这些步骤:
http://d2930476l2fsmh.cloudfront.net/LostKeypairRecoveryOfLinuxInstance.mp4
我生成了一个新t2.micro
实例并按照的步骤确认了目录上的Mary
权限和yromanenko
分辨率。755
/home/ubuntu
我将有问题的 EBS 设备重新连接回第一个 EC2,/dev/sda1
并尝试仅因同样的Permission denied (publickey)
错误而失败!!
因此,现在我在第二个实例上遇到了同样的错误t2.micro
。:(
任何帮助,将不胜感激!
答案1
我遇到了同样的问题。我使用的是 Amazon EC2 实例,因此我可以启动另一个实例并识别差异。损坏的机器的 /home/user 权限为 777,未损坏的机器的权限为 700。出于某种无法解释的原因,rsyncing 到 /home/user 会将 /home/user 的权限更改为 777。显然,出于安全原因,SSH 要求 /home/user 为 700。这也解释了为什么它会一直处于乌龟状态,再次 rsync 后它又坏了。
如果你有幸能以其他方式访问该目录,
chmod 700 /home/user
修复它。
将来,rsync 到 /home/user 的子目录。