SSH รีเซ็ตเป็นพอร์ตเริ่มต้นเมื่อรีบูต


12

ฉันเปลี่ยนพอร์ต SSH เริ่มต้นของฉันบนเซิร์ฟเวอร์ภายในบ้าน (ใน/etc/ssh/sshd_configไฟล์) เป็นพอร์ต 54747 จากนั้นรีสตาร์ทsshและsshdบริการ (ไม่แน่ใจว่าอันไหนดังนั้นฉันทำทั้งสองอย่างให้ปลอดภัย) เพื่อทดสอบการกำหนดค่าของฉันฉันออกจากระบบแล้วกลับเข้ามาใหม่โดยไม่มีปัญหาใด ๆ

สองสามวันต่อมาฉันติดตั้งโปรแกรมปรับปรุง apt แล้วรีบูตเซิร์ฟเวอร์ของฉัน เมื่อฉันพยายามที่จะ SSH กลับมา (บนพอร์ต 54747) ฉันได้รับการเชื่อมต่อปฏิเสธข้อผิดพลาด

ด้วยเหตุผลบางอย่างฉันพยายาม SSH บนพอร์ตเริ่มต้นและใช้งานได้! ฉันกลับไปตรวจสอบ sshd_config แต่ก็ยังมีพอร์ตที่กำหนดเอง ดังนั้นฉันเริ่มต้นใหม่sshและsshdบริการและได้กลับไปที่พฤติกรรม "ปกติ" (ssh บนพอร์ต 54747) ฉันลองรีบูตอีกครั้งและการเชื่อมต่อถูกปฏิเสธอีกครั้ง ...

มีใครรู้บ้างว่าฉันทำผิดอะไร

รายละเอียดเพิ่มเติม:

  • Ubuntu 16.04.2 LTS
  • เซิร์ฟเวอร์ยังใช้ HTPC ด้วยเซสชันเปิด (ผู้ใช้เดียวกันกับ SSH) บนทีวีของฉัน
  • ฉัน SSH ใช้คีย์ RSA ของแล็ปท็อปและปิดการใช้รหัสผ่านรับรองความถูกต้อง
  • ฉันเคยรีบูทด้วยsudo reboot -h nowแต่หลังจากค้นหาแล้วฉันพบว่าบางคนท้อแท้ดังนั้นฉันจึงลองsudo rebootแต่ก็ไม่ต่างกัน

แก้ไข ลำดับเหตุการณ์:

  1. เปลี่ยนพอร์ต SSH จาก 22 เป็น 54747 ใน /etc/ssh/sshd_config
  2. เริ่มบริการ ssh และ sshd ใหม่
  3. สิ้นสุดเซสชัน SSH ปัจจุบัน
  4. SSH กลับเข้ามาในพอร์ต 54747 สำเร็จ
  5. Reboot
  6. ข้อผิดพลาดการเชื่อมต่อ SSH บนพอร์ต 54747 แต่สำเร็จในพอร์ต 22
  7. เริ่มบริการ ssh และ sshd ใหม่
  8. SSH กลับเข้าที่พอร์ต 54747 สำเร็จข้อผิดพลาดในการเชื่อมต่อที่พอร์ต 22
  9. รีบูทแล้วย้อนกลับไปที่ 6

แก้ไข 1: netstatเอาต์พุต

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

แก้ไข 2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

แก้ไข 3: lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

สำหรับการอ้างอิง ATLAS เป็นชื่อโฮสต์เซิร์ฟเวอร์ระยะไกล 192.168.1.27 คือ LAN IP ของแล็ปท็อปของฉันและคำสั่งถูกเรียกใช้ระหว่างขั้นตอนที่ 6 และ 7

ufw status

Status: inactive

แก้ไข 4: ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd

ฉันไม่ได้ดูถูกคุณ แต่อย่างใด แต่ดูเหมือนว่าคุณจะไม่ได้ป้อนคำสั่งบนเซิร์ฟเวอร์ ssh ตามที่ร้องขอ คุณไม่สามารถเชื่อมต่อ live ssh ได้เมื่อ ssh daemon is dead ....... บนเซิร์ฟเวอร์ ssh, ps -ef | grep sshd ควรกลับกระบวนการ / usr / sbin / sshd -D มีหลายคนที่ช่วย แต่ส่งคุณไปในทิศทางที่แตกต่างกันทั้งหมด ฉันยินดีที่จะแชทกับคุณใน IM หากเป็นประโยชน์กับคุณ
jones0610

อาจเป็นเพราะฉันมีเซสชันที่ผู้ใช้รายเดิมเปิดและแสดงบนทีวีกับ Kodi หรือไม่
3rgo

สวัสดี @ 3rgo คุณจัดการเพื่อแก้ปัญหานี้ได้หรือไม่?
pa4080

หวัดดี! ไม่ฉันยังประสบปัญหานี้ ... โชคดีที่ฉันไม่ต้องรีบูตเซิร์ฟเวอร์ภายในบ้านของฉันบ่อย ๆ แต่ก็ยังคงมีความเจ็บปวดอยู่เพราะมันทำให้กระบวนการอัตโนมัติบางอย่างของฉันหยุดชะงัก ...
3rgo

ฉันมีความคิดบางอย่าง (1) คุณสามารถลองเปลี่ยนพอร์ตเป็นค่าเริ่มต้นจากนั้นรีสตาร์ทระบบทั้งหมด จากนั้นลองเปลี่ยนเป็นค่าที่ต้องการอีกครั้ง (2) Port 10285ลองมีค่าแตกต่างกันเช่น Google แสดงผลลัพธ์สองสามรายการสำหรับ 54747 ... (3) นอกจากนี้เซิร์ฟเวอร์ SSH สามารถทำงานกับหลายพอร์ตพร้อมกันได้ สร้างสองคำสั่งแยกกันสำหรับแต่ละพอร์ต: Port 22และPort 54747จากนั้นเปิดเฉพาะที่สองในไฟร์วอลล์ (4) คุณสามารถลองMatch LocalPortสั่งsshd_cที่วางไว้ในจุดเริ่มต้นของ
pa4080

คำตอบ:


2

ssh อาจเป็น "ซ็อกเก็ตที่เปิดใช้งาน" โดย systemd ขึ้นอยู่กับการกำหนดค่าซึ่งหมายความว่าในตอนแรกมันเป็น systemd ที่ตั้งค่าพอร์ตการฟังและ sshd จะเริ่มต้นเฉพาะเมื่อลูกค้าเชื่อมต่อครั้งแรก นี่คือเพื่อเพิ่มความเร็วเวลาเริ่มต้น: daemons บริการจะเริ่มตามความต้องการเท่านั้น

อย่างไรก็ตามนี่หมายความว่าคุณต้องกำหนดค่า systemd ให้กับพอร์ตที่ตรงกัน คุณจะได้พบกับการกำหนดค่าระบบในที่รายการ/lib/systemd/system/ssh.socket ListenStream=22หากต้องการลบล้างสิ่งนี้ให้สร้างไฟล์/etc/systemd/system/ssh.socket.d/port.conf(สร้างไดเรกทอรีssh.socket.dหากจำเป็น) ที่มี:

[Socket]
ListenStream=
ListenStream=54747

เปลี่ยนหมายเลขเป็นพอร์ตที่ต้องการ รายการว่างแรกจะลบค่าเริ่มต้นก่อนหน้านี้และรายการที่ตามมาจะเพิ่มรายการใหม่ นี้แทนที่ค่าเริ่มต้นในการจัดส่ง/lib/systemd/system/ssh.socketและจะต้องทำนอกเหนือจากการ/etc/ssh/sshd_configเปลี่ยนแปลง

จากนั้นsudo systemctl daemon-reloadให้รันเพื่อบอก systemd เกี่ยวกับการเปลี่ยนแปลงของคุณและsudo systemctl reload sshถ้า ssh daemon ของคุณทำงานก่อนหน้านี้


คำตอบนี้ดูมีแนวโน้มมากแต่/etc/systemd/system/ssh.socket.d/port.confจะถูกละเว้นและการรีบูตเครื่องยังคงรีเซ็ตพอร์ตเป็น 22 ชื่อไฟล์เกี่ยวข้องหรือไม่? ไม่สามารถที่จะหาเอกสารที่ดีในการแทนที่ systemd บน Ubuntu
MestreLion

ชื่อไฟล์ไม่สำคัญตราบใดที่มันลงท้าย.confด้วย ดูsystemd-system.conf (5)สำหรับรายละเอียดเกี่ยวกับไฟล์การกำหนดค่าการแทนที่ systemd
Robie Basak

นอกจากนี้คุณสามารถเรียกใช้systemctl status ssh.socketเพื่อดูว่าเปิดใช้งานหรือไม่และกำลังฟังอยู่
Robie Basak

2
มันใช้งานได้ !!! ในที่สุดภารกิจนี้ก็ได้รับการแก้ไข! แต่หลังจากนั้นฉันสังเกตเห็นว่าฉันสามารถเข้าถึงโดยใช้พอร์ตทั้งสอง : ค่าเริ่มต้น 22 และพอร์ตที่กำหนดเอง การเพิ่มListenStream=บรรทัดก่อนที่พอร์ตแบบกำหนดเองจะป้องกันสิ่งนี้ไม่แน่ใจว่าทำไม อาจเป็นการ "ล้าง" การListenStream=22ตั้งค่าในค่าเริ่มต้น/lib/systemd/system/ssh.socketหรือไม่ วิธีแปลก ๆ ในการแทนที่การตั้งค่า อาจจะคุ้มค่าที่จะเพิ่มคำตอบนี้?
MestreLion

@MestreLion อ่าใช่ถูกต้องแล้ว ฉันจะอัปเดตคำตอบ ขอบคุณ!
Robie Basak

0

ตรวจสอบการตั้งค่าพอร์ตของคุณใน/etc/ssh/sshd_configไฟล์ ตรวจสอบให้แน่ใจว่าคุณกำลังแก้ไขเป็น sudo หรือผู้ใช้ในกลุ่ม sudo สิ่งที่คุณต้องทำเพื่อตั้งค่าพอร์ตคือบนประเภทบรรทัดหนึ่งPort 54747.ตอนนี้ให้เริ่มบริการ ssh ใหม่โดยการเรียกใช้service sshd restart.จากนั้นตรวจสอบว่า ssh กำลังรับฟังพอร์ตนั้นโดยการเรียกใช้sudo netstat -lntp | grep ssh.Reboot และทดสอบ

ตรวจสอบการตั้งค่าเครือข่ายของคุณด้วย หากคุณอยู่ในเครือข่ายองค์กรตรวจสอบให้แน่ใจว่าคุณอยู่ใน vlan ที่ถูกต้อง


ฉันทำการสำรองข้อมูลและแก้ไขไฟล์เป็น sudo และเปลี่ยนPort 22บรรทัดเริ่มต้นเป็นPort 54747เท่านั้น นอกจากนี้ netstat ที่คุณให้ฉันก็ไม่มีเอาท์พุท ฉันได้เพิ่มอันที่แก้ไขใน OP ของฉัน
3rgo

คุณกำลังเชื่อมต่อกับกุญแจถูกต้องหรือไม่? ssh -i key.txt user@ipaddress -p 54747ดังนั้นคุณควรจะเชื่อมต่อเช่น: ตรวจสอบด้วยว่ามีอะไรอีกที่กำลังฟังพอร์ตนั้นอยู่ sudo lsof -i | grep sshDo คุณสามารถตรวจสอบไฟร์วอลล์ของคุณเพื่อให้แน่ใจว่ามันไม่ปิดกั้นอะไร sudo ufw statusทำ:
G_Style

ไม่มีพอร์ตที่ใช้กับ 54747 (ดู OP ของฉันฉันเพิ่ม) ฉันกำลังเพิ่มเอาท์พุทของคำสั่งของคุณไปด้วย
3rgo

หลังจากคิดถึงปัญหาของคุณมากขึ้นฉันรู้สึกว่ามันไม่ใช่การตั้งค่าของคุณ แต่เป็นวิธีที่คุณทำการรีบูตซึ่งเป็นสาเหตุของปัญหาที่คุณกำลังประสบอยู่ shutdown -r nowเมื่อคุณเริ่มต้นที่คุณควรใช้คำสั่ง ลองทำดูและบอกให้เรารู้ผลลัพธ์ ดูบทความนี้สำหรับการอ้างอิง: askubuntu.com/questions/483670/…
G_Style

ฉันเพิ่งลองและได้ผลลัพธ์เช่นเดียวกับsudo reboot -h nowหรือ `sudo reboot``
3rgo

0

บางครั้งสิ่งผิดปกติ หากฉันอยู่ในสถานที่ของคุณฉันจะลองด้วย:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server

จะต้องให้ฉันเข้าถึงเซิร์ฟเวอร์หรือไม่? ถ้าเป็นเช่นนั้นฉันสามารถทำได้ในวันพรุ่งนี้ตอนเย็นเท่านั้น
3rgo

สวัสดี @ 3rgo ฉันคิดว่าคุณไม่จำเป็นต้องเข้าถึงร่างกาย ฉันแค่ลองใช้ VPS ของฉัน บนเซิร์ฟเวอร์ Ubuntu ที่บ้านของฉันด้วยในขณะที่ฉันล็อกอินด้วย SSH แม้แต่การเชื่อมต่อก็ไม่ถูกขัดจังหวะ cpคำสั่งเป็นเพียงในกรณีที่มักจะติดตั้งใหม่ไม่ได้สัมผัสไฟล์กำหนดค่า
pa4080

Hi! ฉันลองติดตั้งใหม่ แต่ไม่มีอะไรเปลี่ยนแปลงฉันยังคงมีปัญหาเดียวกัน ...
3rgo

0

ssh เป็นกระบวนการไคลเอนต์ที่กำหนดและรักษาการเชื่อมต่อเซสชันผู้ใช้กับเซิร์ฟเวอร์ ssh sshd เป็น daemon ที่ทำงานบนเซิร์ฟเวอร์ ssh เพื่อรับฟังและตรวจสอบความถูกต้องของคำขอการเชื่อมต่อ ssh

ไฟล์การกำหนดค่าบนเซิร์ฟเวอร์ sshd ที่อ่านเมื่อเริ่มบริการ sshd (ซึ่งต้องใช้สิทธิ์ sudo เพื่อแก้ไข) คือ

/etc/ssh/sshd_config

บริการควรเริ่มจาก

/etc/systemd/system/sshd.service

หากต้องการรีสตาร์ท sshd ซึ่งจะเกี่ยวข้องกับการอ่านไฟล์ sshd_config อีกครั้ง

sudo service sshd restart

หากต้องการดูพอร์ตที่ sshd daemon กำลังรับฟังรวมถึงข้อมูลที่เป็นประโยชน์อื่น ๆ บนชนิดเซิร์ฟเวอร์ ssh

sudo service sshd status

ทำตามขั้นตอนเหล่านี้ตามลำดับที่ระบุ:

รีบูตเซิร์ฟเวอร์ ssh

เปิดเทอร์มินัลเซสชันบนเซิร์ฟเวอร์ ssh (ไม่ใช่การเชื่อมต่อ ssh เข้าไป)

ชนิด hostname

หากชื่อโฮสต์ไม่ส่งคืนชื่อของเซิร์ฟเวอร์ ssh (Atlas ในกรณีนี้) ทำซ้ำขั้นตอนก่อนหน้าอย่างถูกต้อง

grep Port /etc/ssh/sshd_config - จดบันทึกหมายเลขพอร์ต ควรเป็นคนที่คุณระบุ

sudo service sshd status

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

ขั้นตอนเหล่านี้มีแนวโน้มที่จะระบุสาเหตุที่แท้จริงของปัญหาที่คุณถาม

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

ssh -l username -p 54747 hostname

จากความคิดเห็นของ OP ฉันสงสัยว่า sshd ไม่ได้เริ่มการบูทเครื่อง แต่จะเริ่มต้นอย่างถูกต้องเมื่อเรียกใช้ด้วยตนเอง การเชื่อมต่อ ssh ที่สำเร็จผ่านพอร์ต 22 อาจไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์ ssh แต่เชื่อมต่อกับอย่างอื่น (เช่น localhost) เพื่อพิสูจน์หรือลบล้างสิ่งนี้หลังจากเชื่อมต่อผ่านประเภท ssh

hostname

จากสิ่งที่ OP พูดฉันเดาว่าชื่อโฮสต์จะไม่ใช่ atlas เซิร์ฟเวอร์ ssh

เพื่อแยกสิ่งนี้เพิ่มเติมหลังจากรีบูตเซิร์ฟเวอร์ ssh แต่ก่อนที่จะทำอะไรเพิ่มเติมจากเทอร์มินัลเซสชันบนเซิร์ฟเวอร์ ssh (Atlas) ประเภท

ssh localhost

หากสิ่งนี้ล้มเหลวอย่างที่ควรจะเป็น

ssh -p 54747 localhost

หากวิธีนี้ใช้ไม่ได้ผลจะยืนยันผลที่ได้เมื่อใช้งาน

sudo service sshd status

หวัดดี! ฉันเพิ่มลำดับเหตุการณ์เพื่อให้คุณเข้าใจได้ดีขึ้น ฉัน SSH ใช้คำสั่งssh -p <PORT> <USER>@<IP>โดยเพิ่มกุญแจส่วนตัวของฉันลงในเอเจนต์
3rgo

ดีมาก. ทำขั้นตอนที่ 6a: บนเซิร์ฟเวอร์ sshd สถานะ sudo service sshd หากรายงานพอร์ต 22 แสดงว่ามีไฟล์ปลอม sshd_config ที่เรียกว่า
jones0610

กล่าวว่า "ไม่ใช้งาน (ตายแล้ว)" (ดูผลลัพธ์เต็มรูปแบบใน OP ของฉันในหนึ่งวินาที)
3rgo

ดังนั้นหากมันตาย (ไม่ทำงานและทำงานอยู่) คุณจะไม่ต้องเข้าเครื่องคุณคิดว่าคุณเป็น บนเซิร์ฟเวอร์ sshd พิมพ์ ps -ef | grep sshd หาก sshd daemon บนเซิร์ฟเวอร์ sshd จริง ๆ แล้วจะไม่มีการทำงานของกระบวนการ sshd และทำให้คุณชนะคุณจะไม่สามารถ ssh ได้โดยไม่คำนึงถึงพอร์ตที่ใช้
jones0610

พบกระบวนการ 2 sshd ... ฉันได้เพิ่มเอาต์พุตโดยละเอียด
3rgo

0

อาจเป็นไปได้ว่าคุณเพิ่งตอบ Y เมื่อตรวจพบความแตกต่างระหว่าง sshd_config และแพ็คเกจของคุณ มันถามว่าคุณต้องการติดตั้งเวอร์ชั่นของผู้กักขังหรือรักษาไว้หรือไม่


1
ฉันจำไม่ได้ว่าถูกถามถึงสิ่งนี้ แต่สมมติว่าเป็นกรณีนี้ฉันจะแก้ไขได้อย่างไร
3rgo

0

สาเหตุที่เป็นไปได้ที่ฉันคิดได้

  1. ไบนารี sshd ที่แตกต่างกันเริ่มทำงานเมื่อเริ่มระบบหรือ sshd เริ่มทำงานด้วยการกำหนดค่าที่แตกต่างกัน บางที systemd เป็นผู้ร้ายที่นี่ - มันมีวิธีที่แตกต่างในการเปลี่ยนพอร์ตผ่านทางไฟล์/usr/lib/systemd/system/sshd.socket: https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. / etc / หรือ / etc / ssh ที่ถูกต้องยังไม่ถูกเมาท์เมื่อ sshd เริ่มทำงานมันเป็นโวลุ่มแยกต่างหากบนเครื่องที่ติดตั้งในภายหลังในกระบวนการบูทหรือไม่?
  3. sshd กำลังขาดการอนุญาตให้อ่านไฟล์ปรับแต่งขณะบู๊ตแม้ว่าฉันจะไม่รู้ว่า sshd จะเริ่มทำงานได้ก็ตาม

2
ฉันคิดว่าคุณกำลังเข้าสู่มัน และหากเป็นเซิร์ฟเวอร์ที่ผ่านการอัพเกรดจำนวนมากอาจมีค็อกเทลสคริปต์เริ่มต้นวางอยู่รอบ ๆ (sysv-init, พุ่งพรวด, systemd) อาจเป็นการค้นหาแบบง่ายและตรวจสอบไฟล์ทั้งหมดใน / etc / find /etc/ -iname "*ssh*"เพื่อค้นหาเบาะแสเพิ่มเติม
Bazz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.