在OCI虚拟机与本地Ubuntu虚拟机间配置免密SSH的问题咨询
在OCI虚拟机与本地Ubuntu虚拟机间配置免密SSH的问题咨询
你目前的情况是:
- 有2台托管在OCI上的Ubuntu虚拟机,还有1台本地Ubuntu虚拟机,想要配置免密SSH连接
- 已经下载了SSH公私钥,生成了
.ppk文件并通过putty-tools转换成了OpenSSH格式的私钥keyname.pem,并且能通过ssh -i keyname.pem ubuntu@123.123.123.121正常连接目标机器 - 但执行
ssh-copy-id -i keyname.pem ubuntu@123.123.123.123时,报错找不到keyname.pem.pub文件
问题原因
ssh-copy-id工具默认会尝试读取你指定的私钥文件对应的公钥文件(也就是私钥文件名加上.pub后缀),但你用puttygen转换密钥时只生成了私钥,没有同步生成对应的公钥文件,所以才会出现找不到文件的错误。
正确操作步骤
1. 从现有私钥生成对应公钥文件
在本地Ubuntu虚拟机上,执行以下命令从你的keyname.pem私钥导出公钥:
ssh-keygen -y -f keyname.pem > keyname.pem.pub
这个命令会读取私钥文件,生成对应的公钥并保存到keyname.pem.pub中。
2. 使用ssh-copy-id完成免密配置
现在有了对应的公钥文件,你可以重新执行ssh-copy-id命令,这次就能正常工作了:
ssh-copy-id -i keyname.pem ubuntu@123.123.123.123
或者你也可以直接指定公钥文件路径:
ssh-copy-id -i keyname.pem.pub ubuntu@123.123.123.123
执行后按照提示输入目标机器的Ubuntu用户密码,工具就会自动把公钥添加到目标机器的~/.ssh/authorized_keys文件中,同时设置正确的权限。
备选方案:手动配置公钥
如果ssh-copy-id还是有问题,你可以手动完成配置:
- 先查看公钥内容:
cat keyname.pem.pub - 用现有的密钥方式登录目标机器:
ssh -i keyname.pem ubuntu@123.123.123.123 - 在目标机器上,确保
~/.ssh目录存在,然后编辑~/.ssh/authorized_keys文件,把刚才复制的公钥内容粘贴进去 - 设置正确的权限(这一步很重要,权限不对会导致免密登录失败):
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
额外检查
配置完成后,你可以测试免密登录是否生效:
ssh ubuntu@123.123.123.123
如果还是无法免密登录,可以检查目标机器的/etc/ssh/sshd_config文件,确保以下配置项是开启的:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
修改后记得重启SSH服务:
sudo systemctl restart sshd
备注:内容来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

