SCP ผ่านการเชื่อมต่อเกตเวย์ SSH


8

เลย์เอาต์เครือข่ายของฉันเป็นดังนี้:

ตอนนี้อลิซสามารถเข้าถึงเกตเวย์ SSH (เพียงเกตเวย์จากนี้เป็นต้นไป) ด้วย

ssh alice@external.ip

และไฟล์คีย์ที่ได้รับอนุญาตบนเกตเวย์จะมีลักษณะเช่นนี้

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

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

คำถาม

  1. ฉันจะตั้งค่านี้ได้อย่างไรเพื่อที่อลิซจะสามารถสแกนสิ่งต่าง ๆ ลงในเว็บเซิร์ฟเวอร์ได้ด้วย?

  2. ฉันรู้ว่าสิ่งนี้ทำให้การเชื่อมต่อที่แยกจากกัน แต่มีวิธีการนี้ในการทำงานเป็น ssh ปกติเพื่อให้แม้แต่สิ่งที่ต้องการ-R12345:localhost:22จะทำงานอย่างไร

คำตอบ:


10

หากคุณต้องการเข้าถึงเซิร์ฟเวอร์ ssh หลังเซิร์ฟเวอร์ ssh อื่นเพียงใช้ "ProxyCommand" ตัวอย่าง: เพิ่มใน. ssh / config

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

จากนั้นคุณสามารถเพียง "ssh Alice" หรือ "rsync" หรือ "scp" โดยตรงโดยใช้ "Alice" เป็นชื่อโฮสต์ ความมหัศจรรย์ถูกซ่อนอยู่กับลูกค้า

สิ่งนี้ช่วยให้คุณกำหนดค่า ssh ใหม่ได้อย่างรวดเร็วในกรณีที่โครงสร้างเครือข่าย / การเปลี่ยนแปลงการกำหนดค่าของคุณและเพียงแค่เปลี่ยน. ssh / config แทนที่จะเปลี่ยนทุกสคริปต์

คำอธิบาย: ssh ใช้คำสั่งที่ได้รับเป็น "คำสั่ง proxy" เป็นการขนส่งแทนการเชื่อมต่อ TCP โดยตรง Netcat เป็นเครื่องมือเครือข่ายที่ (ในบรรดาคุณสมบัติอื่น ๆ นับล้าน) เพียงแค่เปลี่ยนเส้นทาง stdin / stdout ไปยังรีโมตโฮสต์ที่ระบุ ดังนั้น "ssh gateway nc sshserver 22" เชื่อมต่อคุณกับเซิร์ฟเวอร์ ssh ของเครื่องนั้น % h คือชื่อโฮสต์และ% p คือพอร์ต การตั้งค่าดังกล่าวช่วยให้คุณระบุ "พอร์ต N" เพื่อเปลี่ยนพอร์ตโดยไม่เปลี่ยนบรรทัด ProxyCommand

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


อีกหนึ่งคำถาม rysnc ไม่ทำงานอย่างนั้นถ้าฉันมีพอร์ตที่กำหนดเองไปยังเครื่องเกตเวย์ ความคิดใด ๆ เกี่ยวกับเรื่องนั้น
zidarsk8

เพิ่ม "Port port_number" ในส่วนที่เกี่ยวข้องของ. ssh / config โปรดอ่าน ssh_config และ sshd_config man pages พวกเขามีข้อมูลมากมายและอาจทำให้คุณมีแรงบันดาลใจมากมาย
Raúl Salinas-Monteagudo

ฉันหมายถึง rsync ไม่ทำงานหากระบุพอร์ตอื่น ฉันได้กำหนดค่าพอร์ตเพื่อให้การเชื่อมต่อทำงานได้ตามปกติ แต่ rsync ทำให้ฉันเกิดปัญหา
zidarsk8

3

ฉันมีปัญหาเดียวกันตรงนี้ แต่ฉันได้มันไปใช้งานได้โดยไม่ต้องเปลี่ยนทุกอย่าง

ทั้งหมดที่ฉันทำคือเพิ่ม $ SSH_ORIGINAL_COMMAND ไปที่ gateway authorized_keys เพื่อส่งผ่านสิ่งใดก็ตามที่อยู่ในห่วงโซ่ไปยังเซิร์ฟเวอร์สุดท้าย

ดังนั้นนี่:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

กลายเป็น:

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

-q ใช้เพื่อระงับข้อความปิดการเชื่อมต่อจากเครื่องจุดสิ้นสุดดังนั้นจึงไม่ได้สิ้นสุดในเอาต์พุตโลคัลหากใช้การเปลี่ยนทิศทางแบบโลคัล

จากนั้นคุณสามารถใช้ scp ดังนี้:

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

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

ตัวอย่างเช่น:

ssh -t alice@external.ip "ls -l" > tmp

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


0

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

ตัวเลือกจะเป็นการตั้งค่าเซิร์ฟเวอร์ VPN ที่เครื่องทำหน้าที่เป็นเกตเวย์ SSH เชื่อมต่อกับมันจากนั้นคุณสามารถเข้าถึงเครื่องที่อยู่หลังไฟร์วอลล์ได้โดยตรง

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