ฉันจะเชื่อมต่อพีซีผ่านพีซีเครื่องอื่นโดยใช้ ssh ได้อย่างไร


13

ฉันมีคอมพิวเตอร์สามเครื่อง

PC1และPC2อยู่บน LAN ส่วนตัวที่PC1เป็นที่รู้จักกันPC2เป็น192.168.0.2

PC2และPC3อยู่บน LAN อื่นที่PC2เป็นที่รู้จักกันPC3เป็น192.168.123.101

ฉันจะเชื่อมต่อกับPC1จากPC3ด้วย SSH ได้อย่างไร

มีบางอย่างเช่น:

ssh user@192.168.0.2 -via user@192.168.123.101

คำตอบ:


19
ssh -o 'ProxyCommand ssh -W %h:%p user@192.168.123.101'

ssh PC1จากนั้นคุณสามารถทำงานได้เพียงแค่

ใช้ดีที่สุดผ่านนามแฝงใน~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p user@192.168.123.101

สำหรับ OpenSSH เวอร์ชั่นเก่าที่ไม่มี-Wตัวเลือก (ฉันคิดว่านี่หมายถึง .4 5.4) ตรวจสอบให้แน่ใจว่าnetcatพร้อมใช้งานบน PC2 และใช้งาน

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh user@192.168.123.101 nc %h %p

1
+1 ใช่และฉันมีคำตอบที่คล้ายกันstackoverflow.com/questions/1010808/1122282#1122282พร้อมรายละเอียดเพิ่มเติม
ephemient

จำเป็นต้องติดตั้ง netcat
Stefan

4

การใช้ SSH มีวิธีแก้ปัญหาที่ชัดเจน:

  1. บนเครื่องของคุณตั้งค่าของคุณ~/.ssh/configว่ามันมีดังต่อไปนี้:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. ที่ทั้งเกตเวย์และเซิร์ฟเวอร์ปลายทางที่คุณต้องการเชื่อมต่อตรวจสอบให้แน่ใจว่าคุณมีกุญแจสาธารณะของลูกค้าในพื้นที่ของคุณ ~/.ssh/authorized_keys

  3. บนเครื่องเกตเวย์คุณต้องแก้ไข~/.ssh/authorized_keysเช่นนั้นที่จุดเริ่มต้นของบรรทัดที่ระบุคีย์สาธารณะของลูกค้าของคุณเพิ่มคำสั่งบังคับดังต่อไปนี้:

    command="ssh -A user_name@ServerTheGatewaySees.ButTheClientCant.net" ...yourPublicKey....
    

-Aคือการส่งตัวแทนถ้าคุณไม่ชอบที่จะส่งรหัสผ่านตลอดเวลา ...

ด้วยวิธีนี้เมื่อใดก็ตามที่คุณทำสิ่งใดสิ่งหนึ่งssh WhatYouWillCallTheConnectionมันจะวิ่งตรงผ่านเกตเวย์และเชื่อมต่อคุณกับเซิร์ฟเวอร์ในอีกด้านหนึ่งอย่างโปร่งใส


2
อย่าใช้ssh -Aหากคุณไม่เชื่อถือผู้ดูแลระบบของเครื่องเกตเวย์ เขาไม่สามารถรับกุญแจส่วนตัวของคุณได้ แต่ตราบใดที่คุณเชื่อมต่อกับเกตเวย์ด้วยssh -Aเขาสามารถใช้ตัวแทนที่ส่งต่อเพื่อเชื่อมต่อกับเครื่องอื่นเช่นคุณ
Jander

2

การส่งต่อพอร์ตอาจมีประโยชน์
จาก PC1:

~# ssh -fN -L 22:PC3:7777 -l <user> PC2  

7777 สามารถเป็นได้แค่พอร์ตใด ๆ (หากยังไม่ได้ใช้งาน) ฉันชอบหมายเลขนั้นบวกกับ "การสั่งซื้อ" ฉันสามารถจัดการโดย +1 ของ (7778, 7779 ฯลฯ ฯลฯ )

สิ่งนี้เสร็จสิ้นคุณจะมีอุโมงค์ 'โปร่งใส' จากพอร์ตท้องถิ่นของ PC1 7777 ไปยังพอร์ต 22 ของ PC3 เพียงแค่ออก:

~# ssh -l <user> -p 7777 localhost  

และคุณควรจะอยู่ใน PC3
คุณยังสามารถใช้ -D เพื่อส่งต่อพอร์ตแบบไดนามิกหากคุณต้องการสร้างพร็อกซี SOCKS ขึ้นมา

~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2  

ไชโย!


1

2017+ (ตั้งแต่ v7.3) - คำตอบนี้คือProxyJump :

ssh -J user@jumphost user@destination

ซึ่งสั้นสำหรับ:

ssh -o "ProxyJump user@jumphost" user@destination

สิ่งนี้สามารถย่อให้สั้นลงssh destโดยใช้~/.ssh/configตัวอย่างข้อมูลเช่น:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on

0

ทางออกเดียวที่ฉันรู้คือการใช้สคริปต์ ssh กับBelier :

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

ไม่นานมานี้ฉันพบREADME.sshhopนี้ในโฮมเพจ MIT Lincoln Laboratory แต่ฉันไม่สามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ มีใครรู้บ้างไหม?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.