Score:1

การสร้างการเชื่อมต่อ SSH แบบย้อนกลับแบบต่อเนื่องจากเซิร์ฟเวอร์ระยะไกลไปยังโฮมไคลเอ็นต์

ธง au

ฉันมีไคลเอนต์ที่บ้านที่ฉันต้องการเชื่อมต่อผ่าน SSH จากเซิร์ฟเวอร์ Ubuntu ระยะไกลของฉัน ขณะนี้ฉันสร้างงาน cron ที่โทรออกจากไคลเอนต์ที่บ้านของฉันไปยังเซิร์ฟเวอร์ระยะไกลอย่างต่อเนื่อง

จนถึงตอนนี้ฉันได้ลองแล้ว: ssh -R 2222:localhost:22 root@<เซิร์ฟเวอร์-ip> -p 2222 และ ssh -L 2222:localhost:22 root@<เซิร์ฟเวอร์-ip> -p 2222 ในงาน cron

ฉันฟังบนเซิร์ฟเวอร์โดยใช้ nc -lvnp 2222 และฉันได้รับข้อความเชื่อมต่อว่า ได้รับการเชื่อมต่อเมื่อ 104.136.5.228 63119 SSH-2.0-OpenSSH_8.8p1 Debian-1

ฉันได้ลองใช้รหัสส่วนตัวของเซิร์ฟเวอร์ของฉันเพื่อเข้าสู่ระบบผ่าน SSH จากลูกค้า: ssh-copy-id root@<เซิร์ฟเวอร์-ip> และ ssh -i id_rsa root@<เซิร์ฟเวอร์-ip>.

การตอบสนองของเซิร์ฟเวอร์: root@<server-ip>: การอนุญาตถูกปฏิเสธ (publickey)

แต่เปลือกกลับไม่ปรากฏ ความช่วยเหลือในทิศทางที่ถูกต้องจะได้รับการชื่นชมอย่างมาก

John Ronald avatar
ca flag
ตรวจสอบให้แน่ใจว่า ~/.ssh/authorized_keys ของคุณมีสิทธิ์ที่ถูกต้อง
Score:2
ธง br
gma

หากคุณต้องการเชื่อมต่อ ssh กับโฮมโฮสต์ของคุณ คุณต้องมี ssh daemon ทำงานอยู่:

# สมมติว่าเซิร์ฟเวอร์ ssh ได้รับการติดตั้งบนโฮมโฮสต์แล้ว
โฮมโฮสต์ $ sudo systemctl start sshd

คุณสามารถสร้างช่องสัญญาณ ssh แบบย้อนกลับระหว่างบ้านและโฮสต์ระยะไกลด้วย:

โฮสต์ที่บ้าน $ ssh -Nf -R 2222:localhost:22 โฮสต์ระยะไกล

-Nf จะทำให้ไคลเอนต์ ssh เป็นพื้นหลังโดยไม่ต้องดำเนินการคำสั่งใด ๆ บนเซิร์ฟเวอร์

-R 2222:localhost:22 จะจัดสรรซ็อกเก็ตเพื่อฟังที่ localhost:2222/tcp บนรีโมตโฮสต์ ซ็อกเก็ตนี้จะส่งต่อแพ็กเก็ตทั้งหมดไปยัง home-host:22/tcp ผ่านการเชื่อมต่อที่ปลอดภัย

ตอนนี้ เชื่อมต่อกับเทอร์มินัลบนรีโมตโฮสต์ คุณสามารถเชื่อมต่อกับ ssh daemon ที่ทำงานบนโฮมโฮสต์ด้วย:

โฮสต์ระยะไกล $ ssh localhost -p 2222

โปรดทราบว่าคุณสามารถใช้เทคนิคนี้เพื่อเชื่อมต่อกับบริการเครือข่ายใดๆ ที่ทำงานบนโฮมโฮสต์ ไม่ใช่เฉพาะ sshd ตัวอย่างเช่น หากคุณมีเว็บเซิร์ฟเวอร์ที่ทำงานบน 80/tcp บนโฮมโฮสต์ เซิร์ฟเวอร์นั้นสามารถเชื่อมต่อด้วย:

โฮสต์ที่บ้าน $ ssh -Nf -R 8080:localhost:80 โฮสต์ระยะไกล

ดังนั้น บนรีโมตโฮสต์ ความมหัศจรรย์จึงเกิดขึ้นกับ:

โฮสต์ระยะไกล $ wget http://localhost:8080
pa4080 avatar
cn flag
คำตอบที่ดี! ฉันจะเพิ่มตัวเลือก `-T` ซึ่งปิดใช้งานการจัดสรรเทอร์มินัลหลอกให้กับคำสั่ง `ssh`: `ssh -TNf ...`
Score:1
ธง cn

นี่คือการกำหนดค่าดังกล่าวจากหนึ่งในเซิร์ฟเวอร์ที่ฉันดูแล การกำหนดค่าใช้บริการ systemd ซึ่งสร้างขึ้นที่ฝั่งไคลเอนต์ นอกจากนี้ยังใช้ อัตโนมัติดังนั้นในขั้นตอนแรกเราต้องติดตั้ง

sudo apt ติดตั้ง autossh

จากนั้นสร้างไฟล์กำหนดค่า SSH

sudo nano /etc/ssh/ssh_config.d/auto-ssh-systemd-hosts.conf
โฮสต์ reverse.server-name.com
    ชื่อโฮสต์ 192.168.1.199
    IdentityFile /root/.ssh/server-name.com/id_rsa
    ผู้ใช้ ผู้ใช้
    พอร์ต 2222
    LocalForward 22 127.0.0.1:2222
    RemoteForward 2222 127.0.0.1:22
    GatewayPort ใช่
    การบีบอัดใช่
  • โปรดทราบว่าคีย์ SSH เป็นของผู้ใช้รูท เนื่องจากคีย์ดังกล่าวจะเป็นเจ้าของบริการ
  • อย่าลืมเปลี่ยนพารามิเตอร์ เจ้าภาพ, ชื่อโฮสต์ และ IdentityFile.
  • ต่อไปนี้จะถือว่าเซิร์ฟเวอร์ ssh ที่ทั้งสองระบบฟังพอร์ตที่กำหนดเอง 2222

ในขั้นตอนนี้ คุณควรจะสามารถ:

sudo ssh reverse.server-name.com # หรือ
sudo autossh reverse.server-name.com

ในที่สุดก็สร้างบริการ

sudo nano /etc/systemd/system/autossh-reverse-server-name.service
[หน่วย]
Description=เปิดอุโมงค์ SSH ไปที่ 'server-name.com'
After=network-online.target

[บริการ]
ผู้ใช้ = ราก
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" reverse.server-name.com
ExecStop=/usr/bin/killall -s ฆ่า autossh
เริ่มใหม่ = เสมอ
รีสตาร์ทวินาที = 3

[ติดตั้ง]
WantedBy=multi-user.target
  • แทนที่ เซิฟเวอร์-name.com และ reverse.server-name.com ด้วยค่าที่แท้จริง

ตอนนี้เปิดใช้งานและเริ่มบริการ

sudo systemctl daemon โหลดซ้ำ
sudo systemctl เปิดใช้งาน autossh-reverse-server-name.service
sudo systemctl เริ่ม autossh-reverse-server-name.service

เพื่อหยุดและปิดบริการ

sudo systemctl หยุด autossh-reverse-server-name.service
sudo systemctl ปิดใช้งาน autossh-reverse-server-name.service

คุณสามารถรับสถานะหรือเริ่มบริการใหม่โดยใช้คำสั่งต่อไปนี้

sudo systemctl สถานะ autossh-reverse-server-name.service
sudo systemctl รีสตาร์ท autossh-reverse-server-name.service

บริการจะเริ่มต้นใหม่โดยอัตโนมัติหากค้าง ในทางกลับกัน อัตโนมัติ จะรักษาชีวิตไว้ได้นานกว่า จุ๊ๆเนื่องจากยังตรวจพบความล้มเหลวของการเชื่อมต่อโดยอัตโนมัติอีกด้วย

อ้างอิง:


เมื่อเริ่มบริการแล้ว คุณควรจะสามารถ:

[email protected]:~$ ssh localhost -p 22 # เชื่อมต่อกับเครื่องโลคอล
user@local-machine:~$ ssh localhost -p 22 # เชื่อมต่อกับ server-name.com

แน่นอน คุณจะต้องให้ข้อมูลการรับรองความถูกต้องที่ถูกต้องกับคำสั่ง

โพสต์คำตอบ

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