Відповіді:
Я б віддав перевагу ssh-keygen -y -e -f <private key>
замість прийнятої відповіді: Як ви перевіряєте державну / приватну програму DSA? на стеку переповнення.
ssh-keygen -y -e -f <private key>
бере приватний ключ і друкує відповідний відкритий ключ, який можна безпосередньо порівняти з наявними відкритими ключами. (Підказка: остерігайтеся коментарів чи ключових варіантів.)
(Як чорт це робить? Я можу лише сподіватися, що відкритий ключ закодований прямо чи опосередковано в приватному ключі ...)
Мені це було потрібно і я використав наступний однолінійний баш. Він не повинен виводити нічого, якщо ключі належать разом. Застосуйте трохи -q
до розрізних сценаріїв, а diff лише встановить код повернення належним чином.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
ssh-keygen -y -e -f id_rsa
не перевіряє id_rsa, а лише поверне значення з id_rsa.pub. Так, наприклад, якщо ви echo 5 > id_rsa
видалите приватний ключ, тоді зробіть diff, diff пройде! Крім того, ssh-keygen -yef foo
якщо foo не є дійсним ключем (і не має відповідного foo.pub), заблокує очікування введення користувача, тому будьте обережні, використовуючи це в сценарії.
Залежно від того, де ви отримуєте файл відкритого ключа, який ви тестуєте, прийнята відповідь може дати помилкові позитивні результати. Це через поведінку, описану в коментарі @drewbenn. Зокрема, коли параметр -e використовується з файлом приватного ключа як параметр -f параметр, він просто папугує (але переформатує) те, що є у пов'язаному файлі відкритого ключа.
Іншими словами,
ssh-keygen -y -f id_rsa
(мабуть) генерує значення відкритого ключа та
ssh-keygen -y -e -f id_rsa
просто і виводить (і переформатує) ключ у існуючому id_rsa.pub, який би він не був .
У моєму випадку я повинен переконатися, що пара не була пошкоджена. Отже, я вирішив порівняти наступне:
ssh-keygen -y -f id_rsa | cut -d' ' -f 2
з
cut -d' ' -f 2 id_rsa.pub
Тому:
diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)
Можливо, це не так гнучко, але краще для моїх потреб. Можливо, це допомагає комусь іншому.
Якщо вони на вашій локальній системі, дотримуватися id_rsa.pub
у вашій $HOME/.ssh/authorized_keys
і ssh
з localhost
допомогою id_rsa
ключа. Якщо це працює, то вони відповідають.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
теж багато допомагає.