หากฉันเข้าสู่ระบบผ่านทาง SSH มีวิธีคัดลอกไฟล์กลับไปที่ระบบโลคัลของฉันโดยไม่ต้องใช้เทอร์มินัลหรือหน้าจอเซสชันอื่นและทำ scp หรือสิ่งที่คล้ายกันหรือไม่ทำ SSH จากระบบระยะไกลกลับไปที่ ระบบท้องถิ่น?
หากฉันเข้าสู่ระบบผ่านทาง SSH มีวิธีคัดลอกไฟล์กลับไปที่ระบบโลคัลของฉันโดยไม่ต้องใช้เทอร์มินัลหรือหน้าจอเซสชันอื่นและทำ scp หรือสิ่งที่คล้ายกันหรือไม่ทำ SSH จากระบบระยะไกลกลับไปที่ ระบบท้องถิ่น?
คำตอบ:
มันง่ายที่สุดถ้าคุณวางแผนล่วงหน้า
เปิดการเชื่อมต่อหลักในครั้งแรก สำหรับการเชื่อมต่อที่ตามมาให้เชื่อมต่อสเลฟของเส้นทางผ่านการเชื่อมต่อหลักที่มีอยู่ ในของคุณ~/.ssh/config
ตั้งค่าการแชร์การเชื่อมต่อที่จะเกิดขึ้นโดยอัตโนมัติ:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
หากคุณเริ่มเซสชัน ssh ไปที่เดียวกัน (ผู้ใช้พอร์ตเครื่อง) เป็นการเชื่อมต่อที่มีอยู่เซสชันที่สองจะถูกส่งสัญญาณไปที่ช่องสัญญาณแรก การสร้างการเชื่อมต่อครั้งที่สองนั้นไม่จำเป็นต้องมีการพิสูจน์ตัวตนใหม่และรวดเร็วมาก
ดังนั้นในขณะที่คุณมีการเชื่อมต่อที่ใช้งานอยู่คุณสามารถทำได้อย่างรวดเร็ว:
scp
หรือrsync
;ในการเชื่อมต่อที่มีอยู่คุณสามารถสร้างอุโมงค์ย้อนกลับ ssh บนบรรทัดคำสั่ง ssh สร้างการส่งต่อระยะไกลโดยส่งผ่าน-R 22042:localhost:22
ที่ 22042 เป็นหมายเลขที่สุ่มเลือกซึ่งแตกต่างจากหมายเลขพอร์ตอื่น ๆ บนเครื่องระยะไกล จากนั้นssh -p 22042 localhost
บนเครื่องระยะไกลเชื่อมต่อคุณกลับไปที่เครื่องต้นทาง; คุณสามารถใช้scp -P 22042 foo localhost:
เพื่อคัดลอกไฟล์
RemoteForward 22042 localhost:22
คุณสามารถอัตโนมัตินี้ต่อไปด้วย ปัญหานี้คือถ้าคุณเชื่อมต่อกับคอมพิวเตอร์เครื่องเดียวกันที่มีหลายอินสแตนซ์ของ ssh หรือถ้ามีคนอื่นกำลังใช้พอร์ตคุณจะไม่ได้รับการส่งต่อ
หากคุณยังไม่ได้เปิดใช้งานการส่งต่อระยะไกลตั้งแต่เริ่มต้นคุณสามารถทำได้ในเซสชัน ssh ที่มีอยู่ ประเภทEnter ~C
Enter -R 22042:localhost:22
Enter. ดูรายละเอียดเพิ่มเติมใน“ ตัวละคร Escape” ในคู่มือ
นอกจากนี้ยังมีข้อมูลที่น่าสนใจในเธรด Server Faultนี้
หากไฟล์มีขนาดเล็กคุณสามารถพิมพ์และคัดลอกวางจากเทอร์มินัลเอาท์พุท ถ้าแฟ้มประกอบด้วยอักขระที่ไม่ใช่พิมพ์ใช้การเข้ารหัสเช่นbase64
remote.example.net $ base64 <myfile (คัดลอกผลลัพธ์)
local.example.net $ base64 -d> myfile (วางเนื้อหาของคลิปบอร์ด) Ctrl +D
สะดวกยิ่งขึ้นถ้าคุณมีการส่งต่อ X แอ็คทีฟให้คัดลอกไฟล์บนเครื่องรีโมตและวางแบบโลคัล คุณสามารถข้อมูลท่อในและนอกหรือxclip
xsel
หากคุณต้องการรักษาชื่อไฟล์และข้อมูลเมตาให้คัดลอกวางไฟล์เก็บถาวร
remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -
อีกวิธีที่ง่าย (IMO) คือ:
# to remote host
cat localfile.conf | ssh user@hostname 'cat -> /tmp/remotefile.conf'
# from remote host
ssh user@hostname 'cat /tmp/remotefile.conf' > /tmp/localfile.conf
หรือถ้าคุณต้องการบางสิ่งบางอย่าง GUI เหมือนพยายามบัญชาการเที่ยงคืน พวกเขาเรียกคุณลักษณะเชลล์-Link distros ส่วนใหญ่มี em mc
ในระบบแพคเกจของพวกเขาเป็น
mc
เป็นวิธีใช้ที่เร็วที่สุด
tgz
ไฟล์ตลอดเวลา :)
SSH รองรับคำสั่งไม่กี่คำผ่านทางอักขระเลี่ยง ( ~
ตามค่าเริ่มต้น):
$ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
$ ~C
ssh> help
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KR[bind_address:]port Cancel remote forward
!args Execute local command
!args
ดูเหมือนว่าจะใกล้เคียงกับสิ่งที่คุณต้องการ โปรดทราบว่าคุณจะต้องPermitLocalCommand
เปิดใช้งาน/etc/ssh_config
ไฟล์ของคุณเพื่อให้~C
คำสั่งใช้งานได้ (ดูman ssh_config
)
คุณสามารถกลับมาใช้เซสชั่น SSH เดียวกันถ้าคุณตั้งค่าในControlMaster
ssh_config
หากคุณทำสิ่งนี้:
$ ~C
ssh> !scp file user@myserver:
ในทางเทคนิคคุณไม่เคยออกจากเซสชัน ssh และไม่จำเป็นต้องตรวจสอบสิทธิ์อีกครั้ง อาจซับซ้อนกว่าที่คุณต้องการ แต่ฉันไม่สามารถคิดวิธีอื่นที่ง่ายกว่านี้ได้
!args
ข้อความช่วยเหลือไม่เจอ
args
ไม่ได้อยู่ในข้อความช่วยเหลือครั้งแรก ( ~?
) แต่ในครั้งที่สอง (ครั้งหนึ่งเคยเข้าสู่ssh>
พรอมต์กับ~C
หนึ่งสามารถพิมพ์help
ที่ssh>
พรอมต์)
ทั้งหมดนั้นเป็นวิธีการที่ซับซ้อนมาก
คุณสามารถเมาท์ระบบไฟล์รีโมตบนเครื่องโลคัลของคุณด้วยsshfs
:
mkdir -p /mnt/sshfs
root@IS1300:~# sshfs 192.168.1.2:/ /mnt/sshfs
root@IS1300:~# umount /mnt/sshfs
จากนั้นคุณสามารถคัดลอกวางไฟล์ด้วย nautilus, gnome, konqueror, dolphin, bash หรืออะไรก็ตาม
sshfs -oIdentityFile=~/.ssh/keyfile.pem user@192.168.1.2:/ /mnt/sshfs/
-R
สำหรับรีโมตสู่โลคัล) หรือ-L
พอร์ตไปข้างหน้า ( สำหรับโลคัลต่อรีโมต) เพื่อรันการถ่ายโอนไฟล์ผ่านสมมติว่าคุณมี daemon การถ่ายโอนไฟล์บางตัวฟังที่ปลายอีกด้านหนึ่งแต่ไม่มีความต้องการเหล่านี้ IMO โปรโตคอล SSH รองรับหลายช่องทางในการเชื่อมต่อเดียวและไคลเอนต์ OpenSSH รองรับมัลติเพล็กซ์ สมมติว่าคุณมีControlMaster
และControlPath
ตั้งค่า ( ControlPersist
มีประโยชน์เช่นกัน)
# การเชื่อมต่อครั้งแรก $ ssh ระยะไกล # จะทวีคูณผ่านการเชื่อมต่อเดียวกันกับ ssh ดั้งเดิมที่เปิด $ sftp ระยะไกล
วิธีที่ง่ายยิ่งขึ้น: เปิด Filezilla (หรือเบราว์เซอร์ ftp ที่คุณชื่นชอบ) เปิดการเชื่อมต่อ ssh ไปยังไซต์เดียวกันค้นหาไฟล์และลากไปยังโครงสร้างไฟล์ในเครื่องของคุณ หากคุณใหม่กับ Filezilla ให้ใช้คุณสมบัติ "ผู้จัดการไซต์" เพื่อเชื่อมต่อใหม่ในครั้งต่อไปอย่างรวดเร็ว
ใช่ฉันรู้ว่าสิ่งนี้เห็นได้ชัดสำหรับคุณส่วนใหญ่ (และไม่แม่นยำตรงจุด) แต่บางคน (เช่นฉัน) ที่พบเธรดนี้ค้นหาโซลูชันเทอร์มินัลเท่านั้นอาจมองข้ามสิ่งที่ชัดเจน
ssh://SERVER
เพียงแค่เปิด
สิ่งที่ฉันได้พบว่าเป็นที่ที่ดีที่สุดและมีประสิทธิภาพมากที่สุดวิธีการแก้ปัญหาคือการใช้และxclip-copyfile
xclip-pastefile
บนเซิร์ฟเวอร์คุณใช้xclip-copyfile
เพื่อคัดลอกหนึ่งไฟล์ขึ้นไป ไฟล์เหล่านี้จะพร้อมใช้งานบนเซิร์ฟเวอร์ภายในเครื่องของคุณ xclip-pastefile
มีคุณสามารถใช้
สิ่งนี้ข้ามความต้องการใช้scp
หรือมีเซิร์ฟเวอร์ ssh แบบโลคัล ฉันใช้สิ่งนี้กับ cygwin เป็นต้น ปัญหาเดียวก็คือต้องมีการติดตั้งxclip
หากคุณยังไม่มี โอ้และสิ่งนี้ใช้ได้กับไฟล์ไบนารีด้วย
หนึ่งในหลาย ๆ เหตุผลที่เราใช้SecureCRTแม้จะต้องการซอฟต์แวร์โอเพ่นซอร์สที่ใช้งานได้จริงก็คือความสะดวกในการถ่ายโอนไฟล์ ไม่มีเพียงการแทนที่โดยตรงในโลก F / OSS
SecureCRT เริ่มออกเป็นโปรแกรม Windows บริสุทธิ์ในช่วงกลางทศวรรษที่ 1990 แต่เป็นลางกับ Mac OS X และ Linux สองสามปีที่ผ่านมา
SecureCRT มีสามคุณสมบัติที่สำคัญสำหรับการถ่ายโอนไฟล์ไปและกลับจากระบบที่คุณเป็น SSH:
Zmodem , Ymodem , XMODEM , มิตและ ASCII - SecureCRT เป็นเรียงโรงเรียนเก่าของจำลอง terminal สนับสนุนในหลาย ๆ วงเอฟทีพี
วิธีใช้งานที่ง่ายที่สุดคือ ZModem เมื่อคุณพิมพ์สิ่งที่ต้องการsz file-to-download
ในบรรทัดคำสั่งระยะไกลsz
โปรแกรมระยะไกลจะเขียนลำดับหนีที่แจ้งให้ SecureCRT เริ่มต้นการดาวน์โหลดfile-to-download
ลงในไดเรกทอรีดาวน์โหลดเริ่มต้นทันที
สิ่งที่น่าประทับใจคือไดเรกทอรีดาวน์โหลดนั้นสามารถปรับแต่งได้ในแต่ละครั้ง เราใช้สิ่งนี้เพื่อมีไดเรกทอรีต่อไซต์บนเซิร์ฟเวอร์ไฟล์ office หลักของเราดังนั้นเราไม่จำเป็นต้องเรียงลำดับไฟล์ที่ดาวน์โหลดด้วยตนเอง
( sz
เป็นโปรแกรม "send ZModem" ซึ่งเป็นส่วนหนึ่งของlrzsz
แพ็คเกจมันบรรจุอยู่ในระบบ Unixy ส่วนใหญ่อยู่แล้วด้วยเหตุผลบางประการที่ระบบรีโมตของคุณไม่ได้ติดตั้งไว้แล้วและคุณไม่สามารถติดตั้งแพ็คเกจไบนารีได้อย่างง่ายดาย ซอร์สแพ็กเกจมีขนาดเล็กและพกพาได้มากกว่าหนึ่งครั้งฉันต้องส่งlrzsz
"sharchive"หรือuuencode
'd tarballไปยังระบบรีโมตแบบถอดลงเพื่อให้ฉันสามารถใช้ไฟล์ ZModem ได้)
SFTP - SecureCRT มีการใช้งาน SFTP ขั้นพื้นฐานที่ผสานรวมอย่างแน่นหนา
โดย "รวมอย่างแน่นหนา" ฉันหมายความว่าเมื่อคุณให้คำสั่งเมนู SFTP หรือแป้นพิมพ์ลัดมันจะเปิดแท็บใหม่ที่เชื่อมต่อกับไซต์ระยะไกลผ่านการเชื่อมต่อ SSH เดียวกัน ดังนั้นคุณไม่จำเป็นต้องลงชื่อเข้าใช้อีกครั้งและการเชื่อมต่อนั้นเริ่มเร็วกว่าหากคุณเปิดการเชื่อมต่อ SFTP แยกต่างหากไปยังเซิร์ฟเวอร์เดียวกัน
ฉันลักษณะคุณลักษณะ SFTP เป็น "พื้นฐาน" เพราะ VanDyke ซอฟแวร์ที่มีสินค้าที่มีการถ่ายโอนไฟล์ที่แยกต่างหากSecureFX มันมีคุณสมบัติมากกว่าไคลเอนต์ SFTP ในตัวและยังทำงานร่วมกับ SecureCRT
คุณลักษณะ SFTP ของ SecureCRT ช่วยให้คุณกำหนดค่าไดเรกทอรีระยะไกลและท้องถิ่นเริ่มต้นซึ่งแยกจากการกำหนดค่า ZModem
คุณลักษณะ SFTP นี้มีการเรียงลำดับบรรทัดคำสั่งพื้นฐานของอินเตอร์เฟซการเลียนแบบsftp
โปรแกรมของ OpenSSH ยกเว้นว่ามันมีค่าใช้จ่ายเช่นTabคำสั่งเสร็จสิ้น ดังนั้นการดึงไฟล์จากระยะไกลที่เรียกว่าอาจจะเป็นเรื่องง่ายเหมือนsomefile.tar.gz
get so
TabEnter
ลากแล้วปล่อย - ถ้าคุณลากแล้วปล่อยไฟล์ลงบนหน้าต่างเทอร์มินัลมันจะพิมพ์rz
ให้คุณโดยอัตโนมัติและเริ่มส่งไฟล์
อีกวิธีหนึ่งคุณสามารถเปิดแท็บ SFTP และวางไฟล์ลงบนแท็บนั้นเพื่อส่งผ่าน SFTP ดังนั้นการส่งไฟล์ไปยังระบบระยะไกลอาจจะเป็นง่ายๆเป็นAlt-P, ลาก , ลดลง
เราพบว่าการถ่ายโอนเกิดขึ้นเร็วกว่ามากผ่าน SFTP อาจเป็นเพราะเป็นโปรโตคอลที่ใช้ TCP ดังนั้นจึงได้รับประโยชน์จากหน้าต่างเลื่อนขนาดใหญ่ของสแต็ค TCP / IP ที่ทันสมัย ZModem ได้รับการออกแบบในวันที่ขนาดบล็อก 64 kiB ถูกพิจารณาว่า "ใหญ่" ดังนั้นความเร็วที่เป็นไปได้ในการเชื่อมโยงจะถูกแช่ใน ZModem ในขณะที่ปลายแต่ละด้านรอการยอมรับการถ่ายโอนบล็อก
สิ่งหนึ่งที่ดีเกี่ยวกับโหมดการลากและวางของการดำเนินการคือใช้ความกดดันจากการใช้ ZModem เมื่อคุณพิมพ์rz
ที่ระบบระยะไกล SecureCRT จะเปิดตัวเลือกไฟล์โดยอัตโนมัติ จากนั้นคุณมีเวลาประมาณหนึ่งนาทีในการค้นหาและเลือกไฟล์ก่อนที่ด้านนอกของไทม์เอาต์จะหมด สิ่งนี้สร้างบรรยากาศการแข่งขันต่อเวลาที่ไม่น่าพอใจ ลากและวางช่วยให้คุณค้นหาไฟล์ได้ตามต้องการจากนั้นเริ่มการถ่ายโอนด้วยการเคลื่อนไหวอย่างรวดเร็วของเมาส์เพียงครั้งเดียว
เรายังคงใช้วิธีการด้วยตนเองเริ่มต้นการถ่ายโอนด้วยrz
คำสั่งที่ชัดเจน นี่เป็นเพราะ SecureCRT ช่วยให้คุณกำหนดค่าไดเรกทอรีการอัปโหลดต่อเซสชันซึ่งเราชี้ไปที่โฟลเดอร์บนเซิร์ฟเวอร์ไฟล์ที่มีโครงสร้างล่าสุดของซอฟต์แวร์ที่ไซต์ระยะไกลเฉพาะทำงานอยู่เสมอ สำหรับการถ่ายโอนดังกล่าวจะไม่มีการแข่งขันกับนาฬิกาเนื่องจากตัวเลือกไฟล์จะเปิดในตำแหน่งที่ถูกต้องที่จะเริ่มต้นด้วย
ใช้ "!" เพื่อแปลงไฟล์เป็นไฟล์ ASCII ที่ใช้แทนไฟล์ของคุณ (เช่น! uuencode myfile.bin >uuencode.dat
) ! cat uuencode.dat >target.dat
จากนั้นใช้ หลังจากนั้นใช้ uudecode ที่ด้านเป้าหมาย:! uudecode target.dat >myfile.bin
scp file.foo user@myclient.com:file.foo
: P