ProxyJump
ใหม่ใน OpenSSH 7.3:
A$ scp -oProxyJump=B thefile C:destination
(เบื้องหลังจะใช้ ProxyCommand และssh -W
.)
ProxyCommand
อัปเดตเพื่อรวม -W จากคำตอบอื่น ๆ :
A$ scp -oProxyCommand="ssh -W %h:%p B" thefile C:destination
ถ้า A มีไคลเอ็นต์ SSH เก่ามากติดตั้ง (ไม่-W
สนับสนุน) หรือถ้า B ได้รับการกำหนดค่าให้ไม่อนุญาตการส่งต่อ TCP (แต่ยังคงอนุญาตให้ใช้คำสั่งเชลล์) ให้ใช้ทางเลือกอื่น:
A$ scp -oProxyCommand="ssh B socat stdio tcp:%h:%p" thefile C:destination
A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination
ท่อ
A$ tar cf - thefile anotherfile | ssh B "ssh C \"cd destination && tar xvf -\""
A$ (echo thefile; echo anotherfile) | cpio -o | ssh B "ssh C \"cd destination && cpio -i\""
สำหรับไฟล์เดียว:
A$ ssh B "ssh C \"cd destination && cat > thefile\"" < thefile
"อุโมงค์" ถึง B
A$ ssh -f -N -L 4567:C:22 B
(continues running in background)
A$ scp -P 4567 thefile localhost:destinationPath
เมื่อคุณทำเสร็จแล้วอย่าลืมที่จะฆ่าเริ่มต้นก่อนหน้านี้ssh
กระบวนการ (ซึ่งได้ลดลงถึงพื้นหลังเนื่องจากการ-f -N
)
-f
ร้องขอ ssh เพื่อไปยังพื้นหลังก่อนการดำเนินการคำสั่ง สิ่งนี้มีประโยชน์ถ้า ssh จะขอรหัสผ่านหรือวลีรหัสผ่าน แต่ผู้ใช้ต้องการมันในพื้นหลัง นี่หมายถึง -n
-N
อย่าดำเนินการคำสั่งระยะไกล สิ่งนี้มีประโยชน์สำหรับการส่งต่อพอร์ต
สลับ "อุโมงค์" ไปทาง B ถึง A
ไม่สามารถใช้งานได้เสมอ:
A$ ssh -f -N -R 4567:localhost:22 B
(now you can reach A from B, by using localhost:4567)
B$ scp -P 4567 localhost:thefile C:destination
-R
ระบุว่าการเชื่อมต่อกับพอร์ต TCP ที่กำหนดหรือซ็อกเก็ต Unix บนโฮสต์ระยะไกล (เซิร์ฟเวอร์) จะถูกส่งต่อไปยังโฮสต์และพอร์ตที่กำหนดหรือซ็อกเก็ต Unix ที่อยู่ด้านโลคัล
A$ rsync <options> -e 'ssh B ssh' source C:destination