Keys / .ssh / अधिकृत_keys ফর্ম্যাটে কীগুলি দেওয়া, আপনি কী কী শক্তি সহজে নির্ধারণ করতে পারেন?


17

~ / .ssh /uthor_keys [2] এ সর্বজনীন কীগুলির তালিকা রয়েছে।

দুর্ভাগ্যক্রমে, প্রতিটি পাবলিক কী কী শক্তি (বিটের সংখ্যা) নির্দিষ্ট করে না।

এমন কোনও ইউটিলিটি রয়েছে যা এই ফাইলটি লাইন দ্বারা প্রক্রিয়াকরণ করতে পারে এবং কী শক্তিটিকে আউটপুট দেয়?

আমি ম্যান পৃষ্ঠাগুলি পরীক্ষা করেছি ssh-keygen, তবে দেখে মনে হচ্ছে এটি কেবল ব্যক্তিগত কী দিয়ে কাজ করবে।

এছাড়াও, এমন কোনও সরঞ্জাম আছে যা pageantপুটি সরঞ্জামটিতে প্রদর্শিত হ'ল শ্যাশ হ্যাশকে একইভাবে আউটপুট দেয় ?

আমি যে ফর্ম্যাটটি সন্ধান করছি:

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
দ্রষ্টব্য, ওপেনশ--.২ এর জন্য আপনাকে আর গৃহীত উত্তরে ম্যাজিক করার দরকার নেই এবং আপনি কেবল ssh-keygenপুরো ফাইলটি দিয়ে ফিড করতে পারেন । আমার উত্তর নীচে দেখুন
জাকুজে

উত্তর:


17

ssh-keygen কাজের মূল কাজটি করতে পারে (পাবলিক কী থেকে আঙুলের ছাপ তৈরি করে) তবে এটি স্বয়ংক্রিয়ভাবে একাধিক কীগুলির তালিকাতে প্রক্রিয়া করবে না কারণ সাধারণত কোনও authorized_keysফাইলে পাওয়া যায় ।

এখানে একটি স্ক্রিপ্ট রয়েছে যা কীগুলি বিভক্ত করে, এসএস-কিজেনে তাদের খাওয়ায় এবং আপনার সারণীটি তৈরি করে:

#!/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)"অবশ্যই পরিবর্তন করতে হবেtmp="$(mktemp -t fingerprint-authkeys.XXX)"
স্টেফান

1
@Stefan: কোনো সমস্ত সংস্করণের mktemp(1)প্রয়োজন XS: FreeBSD 'র , Mac OS X এর । তবে, তাদের যুক্ত করা তাদের প্রয়োজন নেই এমন আচরণগুলিতে ক্ষতি করবে না (এলোমেলো প্রত্যয়ের আগে তারা এক্স এর সাথে শেষ হয়)।
ক্রিস জনসেন

ওহ .. :) দুর্দান্ত ... আমি আমার খিলান বাক্সে স্ক্রিপ্টটি চালানোর চেষ্টা করেছি ... বলে চলেছি/home/steve/.scripts/key-strength: line 36: $1: unbound variable
স্টেফান

ধন্যবাদ, -lবিকল্পটি সত্যই আমি যা খুঁজছিলাম! তবুও এটি অবিশ্বাস্য যে আপনি এসএসএস-কীজেনের জন্য কোনও কিছু পাইপ করতে পারবেন না এবং MUSTডিস্কে ফাইল রাখতে পারবেন না ।
আলেকজান্ডার পোগ্রেবন্যাক

1
দ্রষ্টব্য, ওপেনশ--.২ এর জন্য আপনার আর এই যাদু করার দরকার নেই এবং আপনি কেবল ssh-keygenপুরো ফাইলটি দিয়ে ফিড করতে পারেন । আমার উত্তর নীচে দেখুন
জাকুজে

10

ssh-keygenওপেনশ--.২ (বর্তমানে ফেডোরা এবং উবুন্টু জেনিয়ালে অন্তত) একটি একক ফাইল থেকে একাধিক কী পড়ার পক্ষে সমর্থন করে। সুতরাং সহজভাবে চলমান

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

কাঙ্ক্ষিত আউটপুট ফলাফল।


1
ভাল যে তারা শেষ পর্যন্ত ঘাটতিটি স্থির করেছে। +1
আলেকজান্ডার পোগ্রেবন্যাক

7

আপনার কাছে zsh থাকলে আপনি ওয়ান লাইনার হিসাবে এটি করতে পারেন:

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

4

zsh সমাধান একটি ব্যাশ সমাধান থেকে এক্সট্রাপোলটিং

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

/ dev / fd / 63 কোনও সর্বজনীন কী ফাইল নয়।
/ dev / fd / 63 কোনও সর্বজনীন কী ফাইল নয়।

প্রায় ... এটি কাজ করা উচিত, তবে এসএসএস-কীজেনটি উত্পন্ন এফডি থেকে সরাসরি পড়া পছন্দ করে না বলে মনে হয়। <(পুনঃনির্দেশ, এটি তখন কাজ করে) এর জন্য একটি টেম্প ফাইল ব্যবহার করে কেন?

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 / key (আরএসএ)
3072 83: সিডি: আফ: বি 4: এফএফ: ff: ff: ff: 02: 30: e7: 1e: 47: ed: c5: 69 / tmp / key (আরএসএ)

অবশ্যই আপনি আরও সহজেই এটি লিখতে পারেন এবং খুশি হতে পারেন

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

হতে পারে ssh-keygen এর নতুন সংস্করণটি একটি বিশেষ ফাইল থেকে পঠন পরিচালনা করতে পারে কারণ আপনার ওয়ান-লাইনারটি আমার পক্ষে পুরোপুরি কাজ করে।
ব্রায়ান মিন্টন

কিছু সংস্করণ স্টিডিনের কাছ থেকে পড়ার মতো, অন্যরা তা অস্বীকার করে। একটি সাধারণ ফাইলের মধ্য দিয়ে যাওয়া সর্বত্র কাজ করে।
মার্সিন

3

authorized_keysফাইল থেকে সমস্ত আঙুলের ছাপগুলি তালিকাভুক্ত করার জন্য স্ক্রিপ্ট , সারণ দ্বারা তৈরি করা হয়েছে:

#!/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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.