这不是关于在服务器上复制公钥然后 ssh-ing,如果你打算这样做的话。
所以我做了一个 AWS Linux 实例,我做了一个 ssh 密钥对,它自动下载了私钥。
现在我可以通过简单的方式连接到我的 AWS Linux 实例:
ssh -i key_they_gave_me ec2-user@AWSinstanceIP
我如何为我自己的 Linux 虚拟机设置这种东西?这样有人就可以使用私钥 ssh 进入它,而不需要密码?
编辑:我不是在谈论复制 id_rsa.pub。我知道该怎么做,而 AWS 实例不需要这样做。这就是我想要的。
SSH 允许使用空密码。
ssh-keygen
您可以通过在提示输入密码时简单地按 enter来复制它。来自man ssh-keygen
:这是作为各种云服务的一部分生成的密钥的标准行为。如果您使用 Google 或 Microsoft 云,我希望您会发现同样的事情会发生。它可能看起来不安全,但替代方案也不是很好。他们需要以某种方式授予您访问 VM 的权限。
对于任何担心安全的人,
ssh-keygen
还有一个无需更改公钥即可更改私钥密码的功能:就我个人而言,我默认使用密码短语,但将无密码密钥存储在 LUKS 卷中。当我知道我将要经常使用 sshing 时,我将无密码密钥安装在默认密钥的顶部。当我完成工作后,我会卸载,所以任何入侵者仍然需要处理密码。这避免了很多时候对 ssh-agent 的需求,同时对密钥的安全性进行了很多控制。
您在询问 AWS 的基础设施如何生成 ssh 密钥。除非任何为 AWS 工作并被允许披露该信息的人(极不可能),否则您将无法得到完整的答案。
最重要的是,您要寻找的答案完全取决于您使用的虚拟化后端。
话虽如此,AWS 的公开信息是,他们现在使用自己自制的
KVM
虚拟化平台,而不是XEN
像过去那样使用。所以我们可以大胆猜测 AWS 是如何做到的,或者至少提供一种通过 kvm 主机执行此操作的方法。我知道的最常见的方法是
virt-sysprep
在带有标志的qcow2
图像上使用。--ssh-inject
例子
首先在 kvmhost 上生成公钥
ssh-keygen
。假设您的用户是iamAguest
并且您已将新的公钥存储在/home/iamAguest/.ssh/id_rsa.pub
然后,您将运行
virt-sysprep
以将这些密钥注入到图像中:然后,一旦您使用该映像部署了一个实例
a_linux_image.qcow2
,您就应该能够使用新生成的密钥通过 ssh 登录。亚马逊是如何通过点击按钮做到这一点的?
一个足够简单的脚本就可以做到这一点,但在 AWS 规模的平台上,这无疑会非常复杂。
如果您只是运行自己的 kvm 实例,那么像下面这样简单的事情就可以解决问题:
但是请注意,最好先复制图像,这样如果您打算将其作为消费者解决方案提供,那么您仍然拥有一个没有任何密钥的干净图像。在脚本中加入更多验证也是一个好主意;这只是一个简单的例子。
我实际上找到了这样做的方法。其实很简单。
假设您有 machine1 和 machine2,并且您希望能够从 machine1 访问 machine2 而无需处理 machine1 的密钥,通过一种方法可以让 machine1 的用户甚至从除 machine1 以外的另一台机器访问 machine2。
你
ssh-keygen
在 machine2 上做。你这样做cat /path/.ssh/id_rsa.pub >> /path/.ssh/authorized_keys
,然后chmod 600 /path/.ssh/authorized_keys
,最后你将id_rsa
permission.pem 文件复制并提供给 machine1。这样 machine1 可以连接到 machine2 做
ssh -i permission.pem thatuser@machine2
。machine1 的用户可以随身携带 permission.pem,无需密码即可从任何机器连接到 machine2。当然这是不安全的,但你也可以使用密码。我想知道的是作为一个概念如何去做。这回答了它。