~ / .Ssh / authority_keys biçimindeki anahtarlar verildiğinde, anahtar gücünü kolayca belirleyebilir misiniz?


17

~ / .ssh / yetkili_anahtarlar [2] genel anahtarların listesini içerir.

Ne yazık ki, her ortak anahtar anahtar gücünü (bit sayısı) belirtmez.

Bu dosyayı satır satır işleyebilen ve anahtar gücünün çıktısını alabilen bir yardımcı program var mı?

Man sayfalarını kontrol ettim ssh-keygen, ancak sadece özel anahtarlarla çalışacak gibi görünüyor.

Ayrıca, sha1 karma değerini pageantPutty aracında görüntülendiği gibi çıkaracak bir araç var mı?

Aradığım biçim:

Key Algorithm  Strength  Hash                                             Comment
ssh-rsa        2048      00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff  user1@host1
ssh-rsa        2048      11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11  user2@host2

2
OpenSsh-7.2 için, artık kabul edilen cevapta sihri yapmanız gerekmediğini ve sadece ssh-keygentüm dosyayla beslenebileceğinizi unutmayın . Benim Bkz aşağıda cevabını .
Jakuje

Yanıtlar:


17

ssh-keygen işin çekirdeğini yapabilir (ortak anahtardan parmak izi oluşturarak), ancak genellikle bir authorized_keysdosyada bulunan birden çok anahtarın listesini otomatik olarak işlemez .

İşte anahtarları bölen, ssh-keygen'e besleyen ve istediğiniz tabloyu üreten bir komut dosyası :

#!/bin/sh

# usage: authkeys-report <authorized_keys-file>    

set -ue

tmp="$(mktemp -t fingerprint-authkeys.XXXXXXXX)"
trap 'rm -f "$tmp"' 0

while read opts key; do
    case "$opts" in
        [0-9]*|ssh-dss|ssh-rsa)
            # not options, first "word" is part of key
            key="$opts $key"
        ;;
    esac
    echo "$key" >$tmp
    set -- $(ssh-keygen -lf "$tmp")
    bits="$1" fingerprint="$2"

    set -- $key # Note: will mangle whitespace in the comment
    case "$1" in
        [0-9]*) # SSH v1 key
            type=rsa1
            shift 3
        ;;
        ssh-rsa|ssh-dss) # SSH v2 key
            type="$1"
            shift 2
        ;;
        *)
            type=unknown
            set --
        ;;
    esac

    printf '%-14s %-9s %s %s\n' "$type" "$bits" "$fingerprint" "$*"
done <$1

tmp="$(mktemp -t fingerprint-authkeys)"değiştirilmelidirtmp="$(mktemp -t fingerprint-authkeys.XXX)"
Stefan

1
@Stefan: mktemp(1)Xs: FreeBSD , Mac OS X'e ihtiyaç duymayan tüm sürümler . Ancak, onları eklemek, onlara ihtiyaç duymayanların davranışlarına zarar vermez (rastgele sonekten önce X'lerle sonuçlanırlar).
Chris Johnsen

oh .. :) serin ... benim üzerinde komut dosyası çalıştıran çalıştı kemer kutu ... söylüyordu/home/steve/.scripts/key-strength: line 36: $1: unbound variable
Stefan

Teşekkürler, -lseçenek gerçekten aradığım şey! Yine de ssh-keygen'e hiçbir şey bağlayamamanız ve MUSTdiskte dosya bulundurmanız inanılmaz .
Alexander Pogrebnyak

1
Openssh-7.2 için, artık bu sihri yapmanıza gerek olmadığını ve sadece ssh-keygentüm dosyayla beslenebileceğinizi unutmayın . Benim Bkz aşağıda cevabını .
Jakuje

10

ssh-keygenopenssh-7.2 (Şu anda Fedora ve Ubuntu Xenial'da) tek bir dosyadan birden fazla anahtarın okunmasını destekler. Bu nedenle basitçe

# ssh-keygen -l -f ~/.ssh/authorized_keys
2048 SHA256:xh0IVbI... jakuje@jakuje (RSA)
2048 SHA256:xh0IVbI... jakuje@jakuje (RSA)

istenen çıktı ile sonuçlanır.


1
Sonunda eksikliği gidermeleri iyi oldu. +1
Alexander Pogrebnyak

7

Zsh'niz varsa, bunu tek astar olarak yapabilirsiniz:

while read line ; do ssh-keygen -lf =(echo $line); done < .ssh/authorized_keys

4

zsh çözeltisinden bir bash çözeltisi

while read line ; do ssh-keygen -l -f <(echo $line); done < .ssh/authorized_keys 

/ dev / fd / 63 bir ortak anahtar dosyası değil.
/ dev / fd / 63 bir ortak anahtar dosyası değil.

neredeyse ... Bu işe yaramalı, ama ssh-keygen doğrudan üretilen fd okumak gibi görünmüyor. <(Yönlendirme için geçici bir dosya kullanarak, daha sonra çalışır. Neden?

while read line
do
  cat > /tmp/key <(echo $line)
  ssh-keygen -l -f /tmp/key
done < .ssh/authorized_keys 

1024 1f: c7: da: ef: ff: ff: ff: ff: c8: 77: c6: f8: 1f: dd: f3: 1a / tmp / anahtar (RSA)
3072 83: cd: af: b4: ff: ff: ff: ff: 02: 30: e7: 1e: 47: ed: c5: 69 / tmp / anahtar (RSA)

elbette bunu daha kolay yazabilir ve mutlu olabilirsiniz

while read line
do
  echo $line > /tmp/key
  ssh-keygen -l -f /tmp/key
done < .ssh/authorized_keys 
rm /tmp/key

Belki de ssh-keygen'in yeni sürümü özel bir dosyadan okumayı işleyebilir, çünkü tek astarınız benim için mükemmel çalışır.
Brian Minton

Bazıları stdin'den okuma gibi, bazıları reddetmektedir. Normal bir dosyadan geçmek her yerde çalışır.
Marcin

3

authorized_keysSaravana tarafından oluşturulan tüm parmak izlerini listeleyen komut dosyası:

#!/usr/bin/ksh

USER=`whoami`
USER_H=` lsuser -a home $USER |awk -F '=' '{print $2}'`

cat $USER_H/.ssh/authorized_keys| while read line
do
  echo $line > /tmp/finger_print
  echo "************* Key,finger print details below ***************************"

  cat /tmp/finger_print
  echo

  ssh-keygen -l -f /tmp/finger_print|grep -v not|awk '{print $1" " $2 " " $4}'
  if ssh-keygen -l -f /tmp/finger_print|grep "is not a" > /dev/null 2>&1
  then
    echo "The above key is an Invalid Key,Please correct it"
  fi

  echo "========================================================================"

  rm /tmp/finger_print
done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.