如何为Docker Machine create命令指定SSH公钥?遇自动追加.pub报错求解
问题原因与解决办法
为什么会自动追加.pub后缀?
这是docker-machine的generic驱动的设计逻辑导致的:
--generic-ssh-key参数要求传入的是SSH私钥文件的路径,而非公钥。- 当你指定私钥路径后,docker-machine会自动尝试在同一目录下寻找同名的
.pub公钥文件——这个公钥用于完成SSH连接的身份验证环节(比如确认远程主机的公钥合法性)。 - 你第一次传入的是公钥路径
~/.ssh/public.pub,驱动把它当成了私钥路径,于是自动拼接.pub去找public.pub.pub,自然会提示文件不存在。
第二次报错的可能原因
你改成~/.ssh/public后仍报错,大概率是以下两个原因之一:
- 这个
public文件其实是你的公钥(而非私钥),驱动找不到对应的私钥文件; - 即使
public是私钥,它的权限设置不符合SSH要求(SSH私钥必须是仅当前用户可读可写,权限为600),导致驱动无法识别。
具体解决步骤
确认私钥文件:
因为你的公钥是public.pub,对应的私钥应该是不带.pub后缀的public文件。先检查它是否存在:ls -l ~/.ssh/public如果不存在,说明你可能搞混了公私钥的文件名,或者私钥是其他名称(比如
id_rsa),找到正确的私钥路径即可。修复私钥权限:
确保私钥的权限是600(仅当前用户可读可写),否则SSH会拒绝使用该密钥:chmod 600 ~/.ssh/public正确执行命令:
传入正确的私钥路径重新执行:docker-machine create --driver generic --generic-ip-address=18.122.150.170 --generic-ssh-key ~/.ssh/public app-prod可选:手动指定公钥路径:
如果你的公私钥文件名不匹配(比如私钥叫my-private-key,公钥叫public.pub),可以用--generic-ssh-key-pub参数手动指定公钥路径,避免驱动自动拼接:docker-machine create --driver generic --generic-ip-address=18.122.150.170 --generic-ssh-key ~/.ssh/my-private-key --generic-ssh-key-pub ~/.ssh/public.pub app-prod
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

