从SSH服务器获取公钥

12

我已经寻找这个工具很长时间了。

我需要从SSH服务器中提取模数和指数。

例如,我知道SSH正在运行的服务器是xxx.xxx.xxx.xxx(我可以连接到此服务器/ ping),但我不知道用户名和密码,因此无法登录。

我需要获取该服务器公共RSA密钥的模数和指数。

我发现,ssh-keyscan可以获取模数+指数(来自文档),但仅适用于使用ssh-rsa1的情况。 如果我尝试使用ssh-keyscan获取ssh-rsa(2)公共密钥,则无法从输出中检索模数和指数。

这可行吗?


抱歉,但是您的问题完全不清楚。您想要从服务器上存储的公钥做什么?它不会给您访问该系统的权限,因为您需要私钥才能实现。 - arkascha
我知道。这是我的学士论文。需要收集一些公钥和... :) - user3157560
1
好的,那就创建一些吧。 - arkascha
有所不同。我需要比较服务器上使用的公钥,例如,如果您正在生成公钥,那么两个密钥相同的概率是多少?或者两个不同的密钥是否具有共同的质数因子?这个概率非常接近于0...但是如果您拥有来自一组服务器(例如20,000,000)的公钥,您可以检查是否有2个不同的服务器正在使用相同的公共(私有)密钥,您可以分析它,看看这2个服务器有什么共同点。此外,我正在收集带有IP地址的公钥,因此我可以查看(检查)例如github是否与xxx.org具有相同的公钥。 - user3157560
而且,至少我可以看到使用了什么指数(不仅仅是使用了65537)。接下来,我可以检查模数的长度。也许我只能得到一些公钥,长度为1024位(或512位)。这足以获取真正使用的公钥吗?对于统计用途... - user3157560
显示剩余6条评论
1个回答

27
当然可以!从 GitHub 下载公钥并将其保存到 github.pub 文件中:
ssh-keyscan -t rsa github.com | sed "s/^[^ ]* //" > github.pub

将SSH公钥格式转换为X.509公钥格式:

ssh-keygen -f github.pub -e -m pem > github.pem

解析ASN.1编码以获取公钥模数和指数:
sed "/--/d" github.pem | openssl asn1parse | grep "INTEGER" | sed "s/.*://"

结果:

AB603B8511A67679BDB540DB3BD2034B004AE936D06BE3D760F08FCBAADB4EB4EDC3B3C791C70AAE9A74C95869E4774421C2ABEA92E554305F38B5FD414B3208E574C337E320936518462C7652C98B31E16E7DA6523BD200742A6444D83FCD5E1732D03673C7B7811555487B55F0C4494F3829ECE60F94255A95CB9AF537D7FC8C7FE49EF318474EF2920992052265B0A06EA66D4A167FD9F3A48A1A4A307EC1EAAA5149A969A6AC5D56A5EF627E517D81FB644F5B745C4F478ECD082A9492F744AAD326F76C8C4DC9100BC6AB79461D2657CB6F06DEC92E6B64A6562FF0E32084EA06CE0EA9D35A583BFB00BAD38C9D19703C549892E5AA78DC95E250514069
23

第一行是模数,第二行是指数。


对于Azure Repos,这将是ssh-keyscan -t rsa vs-ssh.visualstudio.com | sed "s/^[^ ]* //" > vs-ssh.pub - Triamus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接