ssh私钥签名

首先感谢凑妈让我想起了半年多没有更新的blog,打算往上面丢点东西

前几天在进某个东西的内测群时有这么一个答题认证

因为找不到截图了所以偷了别人的图

也就是说我们需要使用 ssh-keygen 工具对前面echo输出的校验码进行签名

echo 的 -n 参数表示不输出换行符 ssh-keygen 后的 -n 用来指定签名的用途

当时我翻了一下我的PGP密钥,发现刚好有用来验证的openssh一项。

于是我把子私钥和OpenSSH密钥导出到 C:\Users\listder\.ssh 下,分别保存成listderlistder.pub

然后执行

1
echo -n PwM2CuaBWDtrL1bmI9iXvIN2WBxZcR5l | ssh-keygen -Y sign -n lsposed -f C:\Users\listder\.ssh\listder

结果却报错了

从报错的提示可以看出,这大概是权限问题,似乎是对于文件listder(我们的私钥)它的权限过于开放了,可惜Windows操作系统下并没有chmod这样的东西,所以我打开Google,翻阅了几篇别人的blog,根据其他人的经验删除了继承

这么设置的话就只有文件的所有者才有对这个文件的访问权限。

引用ChatGPT的话

SSH 的最佳安全实践建议私钥文件仅限拥有者自己访问,典型的权限设置为 600(仅拥有者可读写)。这样可以确保只有密钥的拥有者可以读取和使用私钥。

这么一弄果然,之前的报错解决了,但是…

看起来似乎是格式出了问题,于是我用ssh-keygen生成了一份私钥进行对比

一边是BEGIN PGP PRIVATE KEY BLOCK,一边是BEGIN OPENSSH PRIVATE KEY,怪不得会报错 也就是说我们应该把PGP格式的私钥转换成openssh格式

查阅资料,发现在monkeysphere下有一个叫做openpgp2ssh的工具,刚好可以满足我们的要求

可是windows下没有openpgp2ssh,遂启动arch

然后不知道为什么arch安装不上monkeysphere,貌似是少了agent-transfer折腾半天发现agent-transfer也装不上,于是改用debian,qwq

1
gpg --export-secret-keys CEA558EF! | openpgp2ssh CEA558EF > id_rsa

然后把我们的文件保存到C:\Users\listder\.ssh并重命名为listder(记得改权限) 最后,Run!

总算是水完了,后来发现有个更简单的办法。。。我其实可以直接ssh-keygen生成新的密钥,然后丢Github一路回车,没必要折腾这么久,qwq(