উত্তর:
আপনি একত্রিত করে এটি করতে পারেন ssh-keyscan
এবং ssh-keygen
:
$ file=$(mktemp)
$ ssh-keyscan host > $file 2> /dev/null
$ ssh-keygen -l -f $file
521 de:ad:be:ef:de:ad:be:ef:de:ad:be:ef:de:ad:be:ef host (ECDSA)
4096 8b:ad:f0:0d:8b:ad:f0:0d:8b:ad:f0:0d:8b:ad:f0:0d host (RSA)
$ rm $file
(দুর্ভাগ্যক্রমে অনেক সহজ ssh-keyscan host | ssh-keygen -l -f /dev/stdin
কাজ করে না)
ssh-keyscan host | ssh-keygen -lf -
ssh-keygen -l -f <(ssh-keyscan host)
ssh-keygen -l -f -
ssh-keygen 7.2 এবং উপরের হিসাবে প্রত্যাশার মতো কাজ করে। এটা তোলে stderr কিছু মন্তব্য লাইন উত্পাদন করে যে হিসাবে এন্থনি Geoghegan বা উত্তর উল্লেখিত ফিল্টার করা যেতে পারে,ssh-keyscan host 2>/dev/null | ssh-keygen -l -f -
আমাকে সম্প্রতি এটি নিজেই করতে হয়েছিল তাই আমি ভেবেছিলাম এমন একটি উত্তর যুক্ত করব যা দেখায় যে কীভাবে এটি করা যায় ( ওপেনএসএসএইচ 7.2 বা আরও নতুন সংস্করণ সহ ) প্রক্রিয়া প্রতিস্থাপন ব্যবহার করে এক লাইনে:
ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)
নিম্নলিখিত পাঠ্যটি ব্যাখ্যা করে যে কীভাবে এই আদেশগুলি কাজ করে এবং ওপেনএসএসএইচ ইউটিলিটির পুরানো এবং নতুন সংস্করণগুলির মধ্যে আচরণের কিছু পার্থক্য তুলে ধরে।
ssh-keyscan
কমান্ড উন্নত ছিল যাতে ব্যবহারকারীরা SSH সার্ভারের এ প্রমাণীকরণ করতে ছাড়াই প্রকাশ্য হোস্ট কী পেতে পারেন। এর ম্যান পৃষ্ঠা থেকে:
ssh-keyscan
বেশ কয়েকটি হোস্টের পাবলিক ssh হোস্ট কী সংগ্রহ করার জন্য একটি ইউটিলিটি। এটিssh_known_hosts
ফাইল তৈরি এবং যাচাইকরণে সহায়তা করার জন্য ডিজাইন করা হয়েছিল ।
আনার জন্য কী ধরণের -t
বিকল্পটি ব্যবহার করে নির্দিষ্ট করা হয় ।
rsa1
(অপ্রচলিত এসএসএইচ প্রোটোকল সংস্করণ 1)rsa
dsa
ecdsa
(ওপেনএসএসএইচ এর সাম্প্রতিক সংস্করণ)ed25519
(ওপেনএসএসএইচ এর সাম্প্রতিক সংস্করণ)আধুনিক ওপেনএসএইচ প্রকাশে, আনতে হবে এমন ডিফল্ট কীগুলি হ'ল rsa
(সংস্করণ ৫.১), ecdsa
(সংস্করণ .0.০) এবং ed25519
(version. version সংস্করণ থেকে)।
(ওপেনএসএসএইচ সংস্করণ 5.1 এর পূর্বে) এর পুরানো সংস্করণগুলির সাথে ssh-keyscan
,
ডিফল্ট কী টাইপটি ছিল সেকেলে rsa1
(এসএসএইচ প্রোটোকল 1) তাই মূল প্রকারগুলি স্পষ্টভাবে নির্দিষ্ট করা দরকার:
ssh-keyscan -t rsa,dsa hostname
ssh-keyscan
বেস 64-এনকোডড
ফর্ম্যাটে এসএসএইচ সার্ভারের হোস্ট কী মুদ্রণ করে । এটি একটি ফিঙ্গারপ্রিন্ট হ্যাশ রূপান্তর করতে, ssh-keygen
ইউটিলিটি -l
নির্দিষ্ট পাবলিক কী এর ফিঙ্গারপ্রিন্ট মুদ্রণের জন্য তার বিকল্পের সাহায্যে ব্যবহার করা যেতে পারে ।
যদি ব্যাশ, জ্যাশ (বা কর্ন শেল) ব্যবহার করে থাকে তবে প্রক্রিয়া প্রতিস্থাপনটি হ্যান্ডি ওয়ান-লাইনারের জন্য ব্যবহার করা যেতে পারে:
ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)
দ্রষ্টব্য : .2.২ এর আগে ওপেনএসএইচ-র সংস্করণ সহ, ssh-keygen
ফাইলগুলি পড়ার জন্য ব্যবহৃত ফাংশনগুলি
নামক পাইপগুলি (এফআইএফও) খুব ভালভাবে পরিচালনা করে না তাই এই পদ্ধতিটি কাজ করবে না, এইভাবে অস্থায়ী ফাইলগুলি ব্যবহারের প্রয়োজন হয়।
কীগুলির ssh-keygen
মুদ্রণ SHA256 ফিঙ্গারপ্রিন্ট হ্যাশগুলির সাম্প্রতিক সংস্করণ । সার্ভার কী ফিঙ্গারপ্রিন্টের (পুরানো আচরণ) MD5 হ্যাশগুলি পেতে -E
, হ্যাশ অ্যালগরিদম নির্দিষ্ট করতে বিকল্পটি ব্যবহার করা যেতে পারে:
ssh-keygen -E md5 -lf <(ssh-keyscan hostname 2>/dev/null)
যদি কোনও পসিক্স শেল ব্যবহার করে (যেমন dash
) যা প্রক্রিয়া প্রতিস্থাপনের বৈশিষ্ট্যযুক্ত না, অস্থায়ী ফাইলগুলি ব্যবহার করে অন্য সমাধানগুলি কাজ করবে। তবে ওপেনএসএসএইচের নতুন সংস্করণ (.2.২ থেকে) সহ, একটি সাধারণ পাইপলাইন ব্যবহার করা যেতে পারে যেহেতু স্ট্যান্ডার্ড ইনপুট স্ট্রিমের ফাইল-নাম হিসাবে ssh-keygen
স্বীকৃতি দেওয়া হবে -
, এতে এক-লাইন পাইপলাইন কমান্ডের অনুমতি দেওয়া হবে।
ssh-keyscan hostname 2>/dev/null | ssh-keygen -E md5 -lf -
ssh-keygen
ওপেনএসএসএইচ এর পুরানো সংস্করণগুলি থেকে ফিফো / নামযুক্ত পাইপ থেকে পড়তে সমস্যা হয়েছে। যখন আমি কিছু ফ্রি সময় পাই তখন আমি এটিকে লক্ষ্য করব (এবং আমার উত্তর আপডেট করব)।
printf
বিবৃতি সন্নিবেশ করার পরে do_fingerprint()
, আমি দেখতে পেলাম যে before.২ এর আগে ওপেনএসএইচ সংস্করণ সহ ssh-keygen
ফাইলগুলি পড়ার জন্য ব্যবহৃত ফাংশনগুলি নামক পাইপগুলি (ফিফও) খুব ভালভাবে পরিচালনা করে না handle প্রক্রিয়া প্রতিস্থাপন পদ্ধতি কাজ করবে না।
nmap
ssh-hostkey
স্ক্রিপ্ট ব্যবহার করে এই ক্ষমতা প্রদান করে ।
কীটির হেক্সাডেসিমাল ফিঙ্গারপ্রিন্ট ফিরিয়ে দিতে:
$ nmap [SERVER] --script ssh-hostkey
কীটির সামগ্রীটি ফেরত দিতে:
$ nmap [SERVER] --script ssh-hostkey --script-args ssh_hostkey=full
কীটির ভিজ্যুয়াল বুদবুদ ফিরিয়ে আনতে
$ nmap [SERVER] --script ssh-hostkey --script-args ssh_hostkey='visual bubble'
উপরের সমস্তটি ফিরিয়ে দিতে:
$ nmap [SERVER] --script ssh-hostkey --script-args ssh_hostkey=all
উত্স: এনএম্যাপ ডক্স
-p
বিকল্প রয়েছে যা একটি বন্দর নির্দিষ্ট করতে পারে, যেমন -p 22000
। -vv
ফাইলজিলা হেক্সাডেসিমাল ফর্ম্যাটে এমডি 5 সহ হ্যাশগুলি প্রদর্শন করে।
আপনার উবুন্টু লিনাক্স মেশিনে এটি খুঁজতে এই কমান্ডটি ব্যবহার করুন:
ssh-keygen -l -E md5 -f <(ssh-keyscan localhost 2>/dev/null)
দ্রষ্টব্য: আপনি যে মেশিনটি পরীক্ষা করতে চান তার আইপি দিয়ে "লোকালহোস্ট" প্রতিস্থাপন করুন।
এখানে একটি শেল স্ক্রিপ্ট রয়েছে (প্রধানত বোর্ন শেল তবে local
কীওয়ার্ড ব্যবহার করে যা বেশিরভাগ আধুনিক ক্ষেত্রে পাওয়া যায় /bin/sh
) আমি এটি করতে লিখেছি। এটি ব্যবহার করুন ssh-hostkey hostname
। এটি প্রদত্ত হোস্টনাম বা আইপি ঠিকানার জন্য সমস্ত হোস্টকিগুলির জন্য sha256 এবং md5 ফর্ম্যাট উভয়ই ফিংগারপ্রিন্টগুলি প্রদর্শন করবে। আপনি কেবলমাত্র সেই নির্দিষ্ট ফর্ম্যাটটি দেখানোর জন্য দ্বিতীয় আর্গুমেন্ট হিসাবে ম্যানুয়ালি " md5
" বা " sha256
" নির্দিষ্ট করতে পারেন ।
এটি পুরানো ওপেনএসএসএইচ প্যাকেজগুলির সাথে সামঞ্জস্য করার জন্য পাইপিংয়ের পরিবর্তে একটি অস্থায়ী ফাইল ব্যবহার করে (অন্যান্য উত্তরে বর্ণিত)। অস্থায়ী ফাইল /dev/shm
উপলব্ধ (শেয়ার করা মেমরি) যদি উপলব্ধ থাকে।
#!/bin/sh
usage () {
printf '%s\n' "Usage: ssh-hostkey HOSTNAME [FPRINTHASH]"
}
ssh_hostkey () {
local host="$1"
local fprinthash="$2"
local tmp=
case "$host" in
-h|--help|'')
usage >&2
return 1
;;
esac
case "$fprinthash" in
md5|sha256|'') true;;
*)
usage >&2
printf '%s\n' "Fingerprint hash may be 'md5' or 'sha256'" >&2
return 2
;;
esac
if test -d /dev/shm
then tmp="$(mktemp -d -p /dev/shm)"
else tmp="$(mktemp -d)"
fi
trap 'trap - INT TERM EXIT; rm -rf "$tmp"' INT TERM EXIT
ssh-keyscan "$host" > "$tmp/f" 2> /dev/null
case "$fprinthash" in
sha256|'') ssh-keygen -l -f "$tmp/f" 2> /dev/null;;
esac
case "$fprinthash" in
md5|'') ssh-keygen -l -E md5 -f "$tmp/f" 2> /dev/null;;
esac
trap - INT TERM EXIT
rm -rf "$tmp" > /dev/null 2>&1
}
ssh_hostkey "$@"
ssh-keygen -l -f - <(ssh-keyscan host)
পারে, যদিও?