Score:9

ฉันจะรู้ได้อย่างไรว่าเซิร์ฟเวอร์ SSH ที่กำลังทำงานอยู่ในปัจจุบันคือ OpenSSH หรือ Dropbear

ธง in

ถ้าฉันเข้าไปข้างในไฟล์ /etc/ssh/ssh_configฉันเห็น "$OpenBSD" ที่ด้านบนของไฟล์ อย่างไรก็ตาม หากฉันเปลี่ยนพอร์ตเริ่มต้นเป็นค่าอื่น ดูเหมือนจะไม่ทำงาน เพื่อนร่วมงานบอกฉันว่านั่นเป็นเพราะ Dropbear เป็นเซิร์ฟเวอร์ซอฟต์แวร์ของที่นี่ ไม่ใช่ OpenSSH.

มีวิธีที่จะแน่ใจหรือไม่? ฉันไม่สามารถหาคำตอบได้ในกูเกิล

eckes avatar
cn flag
คุณสามารถใช้ netstat หรือ ss กับตัวเลือก -p เพื่อดู PID จากนั้นคุณสามารถตรวจสอบกระบวนการทำงานสำหรับเส้นทางและบรรทัดคำสั่งได้
Score:24
ธง cz

เชื่อมต่อกับพอร์ต ssh (เช่น 22) และตรวจสอบแบนเนอร์

$nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6
Mark avatar
tz flag
เพื่อความสมบูรณ์ แบนเนอร์ของ Dropbear จะขึ้นต้นด้วย `SSH-2.0-dropbear`
TooTea avatar
in flag
สำหรับผู้ที่ไม่ชอบเล่นด้วยการเชื่อมต่อดิบ คุณสามารถดึงข้อมูลเดียวกันได้โดยการเชื่อมต่อกับ `ssh -v localhost` และค้นหา `dropbear เวอร์ชันซอฟต์แวร์ระยะไกล` หรือ `ซอฟต์แวร์ระยะไกล OpenSSH_something`
Score:6
ธง rs

เซิร์ฟเวอร์ SSH ส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) ส่งสตริงเวอร์ชันบางประเภททันทีเมื่อเชื่อมต่อ ในโครงการวิจัยเล็กๆ ของฉัน ฉันพยายามแมปเวอร์ชันเซิร์ฟเวอร์ SSH บนพื้นที่ IPv4 ขนาดใหญ่ และสิ่งที่ฉันทำก็คือ พอร์ตที่อยู่ nc.

ฉันแปลงเป็นสคริปต์ Perl พร้อมการหมดเวลาสำหรับการประมวลผลที่ง่ายขึ้นในด้านของฉัน รวมถึงตัวเลือกการหมดเวลาด้วยค่าเริ่มต้น:

#!/usr/bin/perl
ใช้คำเตือน
ใช้อย่างเข้มงวด

เว้นแต่ ($ARGV[0] && $ARGV[1]) { die "Usage: ./raw hostname port [timeout]\n" }
หมดเวลา $ ของฉัน = '10s';
ถ้า ($ARGV[2]) { $timeout = $ARGV[2] }

$response = `หมดเวลา $timeout nc $ARGV[0] $ARGV[1]`;
พิมพ์ตอบกลับ $;

ทดสอบกับเซิร์ฟเวอร์ในเครือข่ายของฉัน:

./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3
Patrick Mevzek avatar
cn flag
"เซิร์ฟเวอร์ SSH ส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) ส่งสตริงเวอร์ชันบางประเภททันทีเมื่อเชื่อมต่อ" เนื่องจากเป็นข้อบังคับที่ถูกต้องตามมาตรฐาน โปรดดู §4.2 ของ RFC 4253: "เมื่อสร้างการเชื่อมต่อแล้ว ทั้งสองฝ่ายต้องส่ง สตริงการระบุตัวตน" ซอฟต์แวร์ที่ไม่ทำเช่นนี้ไม่ได้ใช้งาน SSH อย่างถูกต้อง (และอาจไม่สามารถทำงานร่วมกับเครื่องมืออื่นๆ ที่พูด SSH ได้)
cn flag
@PatrickMevzek คุณต้องส่งสตริง แต่ฉันเดาว่าสตริงสุ่มหรือว่างเปล่าก็ใช้งานได้เช่นกันและไม่ได้ระบุอะไรมาก
Patrick Mevzek avatar
cn flag
@PaÅloEbermann "คุณต้องส่งสตริง" ใช่นั่นคือสิ่งที่มาตรฐานพูดและฉันได้อ้างอิง RFC ดังนั้น "ถ้าไม่ทั้งหมด?" คำตอบนั้นซ้ำซ้อน/ไม่จำเป็น เซิร์ฟเวอร์ SSH ใด ๆ ที่ไม่ส่งสิ่งนี้ (ไม่มีอะไรเลย) ไม่ได้ใช้โปรโตคอล SSH
Patrick Mevzek avatar
cn flag
@SnakeDoc เพียงเพราะ Perl ไม่จำเป็นต้องใช้ที่นี่ คุณสามารถรันคำสั่งภายใน `timeout ...` ได้โดยตรงในเชลล์ของคุณ Perl จะไม่เพิ่มอะไรเข้าไปที่นั่น (แต่หากถูกใจผู้ใช้ ก็ไม่ใช่ปัญหาจริงๆ .. `การใช้งาน` แม้ว่าจะไม่ตรงกับตัวอย่างที่ให้ไว้ :-)) และฉันจะแนะนำเสมอว่าอย่าใช้ Perl (หรือภาษาอื่น ๆ สำหรับเรื่องนั้น) โดยเฉพาะอย่างยิ่งถ้าคุณทำสิ่งต่าง ๆ ที่ภาษานั้นทำได้ ทำแบบเนทีฟ/ผ่านไลบรารีPerl มี `Net::Socket` ซึ่งจะเป็นวิธีที่เหมาะสมในการทำ `nc` และยังมีทุกสิ่งที่จำเป็นในการปรับใช้การหมดเวลา
pn flag
หากต้องการขยายความคิดเห็นของ @PatrickMevzek RFC ระบุสตริง id ในรูปแบบ "SSH-protoversion-softwareversion SP comments CR LF" โดยที่ protoversion คือ "2.0" และมีเพียงความคิดเห็นเท่านั้นที่เป็นทางเลือก - ตอนนี้พวกเขาเป็นโอเพ่นซอร์สและในทางทฤษฎีแล้วบางคนสามารถสร้าง OpenSSH ด้วย DropBear id ได้ คุณจึงไม่แน่ใจ 100% ผ่านสิ่งนี้ แต่นั่นเป็นวิธีที่จะเดิมพัน!
us flag
bash มีทุกสิ่งที่คุณต้องการ `อ่าน a
Score:3
ธง cn

หากคุณอยู่บนเซิร์ฟเวอร์ ให้ดูที่กระบวนการที่แนบมากับพอร์ตเครือข่าย จุ๊ๆ คาดว่า (22 หรืออย่างอื่น).

คุณสามารถใช้ได้ เน็ตสแตท หรือ เอสเอส สำหรับการที่. จากนั้น คุณจะสามารถค้นหาบรรทัดคำสั่งแบบเต็มของเซิร์ฟเวอร์ที่กำลังทำงานอยู่ ซึ่งอาจเพียงพอที่จะระบุได้ หรือคุณอาจใช้กับตัวเลือกอื่นๆ:

  • วิ่ง สตริง มันเป็นแนวทางสุดท้ายของการดำเนินการจริง ๆ แต่สามารถให้ผลลัพธ์ได้ (คุณจะพบสตริงที่เซิร์ฟเวอร์รายงานจากระยะไกลอย่างแน่นอนที่สุดเช่นเดียวกับคำตอบอื่น ๆ ที่แสดง)
  • คุณสามารถค้นหาไฟล์เปิดที่กระบวนการมี (ดูใน /proc/$PID/fd) ซึ่งอาจให้ลิงก์ไปยังไฟล์คอนฟิกูเรชันหรือไฟล์บันทึก และตามหลักการแล้วไฟล์บันทึกจะให้ข้อมูลเพียงพอที่จะระบุได้ว่ากระบวนการนี้คืออะไร

หรือขึ้นอยู่กับระบบและการตั้งค่าของคุณ เช่น คุณสามารถใช้ systemctl รายการหน่วย เพื่อดูว่าอะไรกำลังทำงานอยู่และคืออะไร จุ๊ๆ เซิร์ฟเวอร์ (จากนั้นตรวจสอบ ระบบ คุณจะเห็นบรรทัดคำสั่งและข้อมูลอื่น ๆ )

หากคุณอยู่ภายนอกเซิร์ฟเวอร์ ให้ดูคำตอบอื่น ๆ แต่ไม่มีการรับประกันว่าการส่งคืนจากเซิร์ฟเวอร์ระยะไกลเป็นความจริง มันสามารถแสดงตัวเองเป็นอะไรก็ได้ที่ต้องการ

อีกทางเลือกหนึ่งจากระยะไกลคือทำ "SSH Fingerprinting"ฉันไม่เห็นสิ่งนั้นโดยตรง แต่ฉันแน่ใจว่ามีอยู่จริง โดยพื้นฐานแล้วโดยการทดสอบการเชื่อมต่อประเภทต่างๆ เราสามารถระบุข้อมูลบางอย่างจากส่วนระยะไกล นอกเหนือจากที่อ้างว่าเป็น ฉันเดาว่าเครื่องสแกนช่องโหว่หลายตัวมีสิ่งที่คล้ายกัน

Score:1
ธง cn

คุณสามารถใช้ได้ ปล เพื่อรับรายการกระบวนการและ เกรป ผลลัพธ์สำหรับ sshd.
ด้วยวิธีนี้ คุณจะได้รับเส้นทางไปยังไบนารีที่เรียกใช้งานได้ {{ เช่น /usr/sbin/sshd หรืออะไรทำนองนั้น }}
จากนั้นคุณสามารถดำเนินการไบนารีนี้ด้วย -? เพื่อรับความช่วยเหลือและข้อมูลการใช้งาน ผลลัพธ์นี้จะมี ชื่อที่ชัดเจนของแพ็คเกจ {{ เช่น OpenSSH หรือ Dropbear หรืออะไรทำนองนั้น }}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา