หากฉันเข้าสู่ระบบผ่านทาง 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-copyfilexclip-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.gzget soTabEnter
ลากแล้วปล่อย - ถ้าคุณลากแล้วปล่อยไฟล์ลงบนหน้าต่างเทอร์มินัลมันจะพิมพ์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