Řešení 1:
Preferoval bych ssh-keygen -y -e -f <private key>
způsobem namísto přijaté odpovědi Jak testujete veřejný/soukromý pár klíčů DSA? na Stack Overflow.
ssh-keygen -y -e -f <private key>
vezme soukromý klíč a vytiskne odpovídající veřejný klíč, který lze přímo porovnat s vašimi dostupnými veřejnými klíči. (Tip:dejte si pozor na komentáře nebo klíčové možnosti.)
(Jak to sakra dělá? Mohu jen doufat, že veřejný klíč je zakódován přímo nebo nepřímo v soukromém klíči...)
Sám jsem to potřeboval a použil následující Bash one-liner. Pokud klíče patří k sobě, nemělo by to vypsat nic. Použijte trochu -q
na rozdíl ve skriptech a rozdíl pouze vhodně nastaví návratový kód.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
Řešení 2:
V závislosti na tom, kde získáte soubor veřejného klíče, který testujete, může přijatá odpověď poskytnout falešně pozitivní výsledky. Je to kvůli chování popsanému v komentáři @drewbenn. Konkrétně, když je použita volba -e se souborem soukromého klíče jako parametr volby -f, jednoduše papouškuje (ale přeformátuje) to, co je v přidruženém souboru veřejného klíče.
Jinými slovy,
ssh-keygen -y -f id_rsa
(zřejmě) generuje hodnotu veřejného klíče a
ssh-keygen -y -e -f id_rsa
jednoduše a výstupy (a přeformátování) klíče v existující id_rsa.pub ať je to cokoli .
V mém případě musím ověřit, že pár nebyl poškozen. Rozhodl jsem se tedy porovnat následující:
ssh-keygen -y -f id_rsa | cut -d' ' -f 2
s
cut -d' ' -f 2 id_rsa.pub
Proto:
diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)
Možná to není tak flexibilní, ale pro mé potřeby je to lepší. Možná to pomůže někomu jinému.
Řešení 3:
Pokud jsou ve vašem místním systému, podržte id_rsa.pub
ve vašem $HOME/.ssh/authorized_keys
a ssh
na localhost
pomocí id_rsa
klíč. Pokud to funguje, shodují se.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost