需求
今天在工作中对 ssh key 有了更深的认识。 昨天给 Scrum 项目组新建了两台 CentOS 虚拟机,Jeffery 希望能够使用 ppk 文件免密码登录。 尝试了几种解决方案。 首先是在自己的机器上利用 PuTTYgen (PuTTY Key Generator) 生成一对公钥和私钥。 然后把私钥保存为 .ppk 文件。 然后把生成的公钥保存到远程的目标服务器的目标用户家目录下 .ssh 下的 authorized_keys 文件中。 如此以来,就可以在自己的机器上,利用 ppk 文件实现免密登录该远程服务器。
参考资料
我们现在一共有 Service, Data, Test1, Test2 四台 CentOS 虚拟机。
- 如何使得它们之间可以通过ssh免密访问?
- 如何使得在个人PC上通过PuTTY对这些虚拟机进行免密访问?
解决方案
为了简化工作流程,就在 Service 服务器上的 xxx-user 用户下,运行 ssh-keygen 生成一对公钥和私钥在其 ~/.ssh 文件夹。 默认的文件名分别是 id_rsa.pub 和 id_rsa。并且以命令 vi ~/.ssh/authorized_keys
新建 authorized_keys 文件, 并且把 公钥的内容追加到 ~/.ssh/authorized_keys 文件中。记得以 chmod 600 authorized_keys
修改文件权限。
并且以 scp 命令把 id_rsa.pub, id_rsa 和 authorized_keys 文件从 Service 服务器 复制 到 其他三台服务器的 ~/.ssh/ 目录下。 这样可以实现这四台服务器之间以ssh免密访问(如果 scp 命令无效,可以手工创建文件、复制、粘贴)。注意 chmod 600 id_rsa
。
以 WinSCP 把私钥 id_rsa 复制到自己的机器上,然后 PuTTYgen -> Conversions -> Import key -> Save private key 可以把在 CentOS 中生成的私钥 另存为 ppk 格式。之后以 PuTTY 登录该四台远程服务器时,就可以凭私钥ppk文件,实现免密登录。
原理分析
首先至少要准备一对公钥和私钥,然后把公钥放在目标服务器上 ~/.ssh/authorized_keys 文件中。然后从持有私钥的客户端服务器上,就可以 ssh xxx-user@IP
免密登录到目标服务器。 使用 PuTTY 则要使用转存之后的 ppk 格式的 私钥。