คัดลอกอินพุตไปยังคลิปบอร์ดผ่าน SSH หรือไม่


33

นี่คือกรณีการใช้งานของฉัน:

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

มีวิธีใช้โปรแกรมเช่นxclipที่จะอนุญาตให้ฉันคัดลอกระยะไกลstdinไปยังคลิปบอร์ดของเซิร์ฟเวอร์ X ภายในหรือไม่ สิ่งที่มีผลต่อ:

cat myconffile.conf | sed {...} | copy-over-ssh-to-local-clipboard

จะน่ากลัว มีบางสิ่งที่จะทำให้สิ่งนี้เป็นจริงได้หรือไม่?

คำตอบ:


20

หากคุณเรียกใช้ ssh ด้วยการส่งต่อ X นี่เป็นคำสั่งที่โปร่งใส: คำสั่งระยะไกล (รวมถึงxclip) มีการเข้าถึงเซิร์ฟเวอร์ X ของคุณ (รวมถึงแป้นพิมพ์) ตรวจสอบให้แน่ใจว่าคุณมีทั้งForwardX11 yesใน~/.ssh/configและX11Forwarding yesในเซิร์ฟเวอร์sshd_config(ขึ้นอยู่กับการกระจายของคุณตัวเลือกเหล่านี้อาจเปิดหรือปิดตามค่าเริ่มต้น)

<myconffile.conf sed {...} | xclip -i

มีวิธีการอื่น ๆ ของการทำงานบนไฟล์ระยะไกลที่อาจจะมีความสะดวกมากขึ้นเช่นการติดตั้งไดเรกทอรีระยะไกลบนเครื่องของคุณมีอยู่SSHfsหรือเปิดไฟล์ระยะไกลใน Emacs กับคนจรจัด ถ้าคุณมี SSH และFUSEตั้งค่าและ SSHfs ติดตั้ง SSHfs mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserverเป็นเรื่องง่ายเหมือน ถ้าคุณได้ SSH ตั้งค่าและ Emacs /myserver:/path/to/fileติดตั้งจรจัดเป็นเรื่องง่ายเหมือนการเปิด


1
ช่องโหว่ด้านความปลอดภัยใด ๆ ที่เรียกใช้สิ่งนี้ด้วยค่าเริ่มต้นในไฟล์ conf?
Naftuli Kay

ไม่การรับส่งข้อมูล x11 ทั้งหมดจะถูกส่งต่อผ่านช่อง SSH
Shadur

2
@TKKocheran ไม่จริง ทางฝั่งเซิร์ฟเวอร์ไม่มี ในด้านไคลเอนต์เล็ก ๆ น้อย ๆ ในการที่มันจะช่วยให้ผู้ดูแลระบบเซิร์ฟเวอร์วิธีการในไคลเอนต์ของคุณ แต่ใน 99% ของกรณีผู้ดูแลเซิร์ฟเวอร์มีวิธีต่อไป; ดูหากมีผู้ลงชื่อเข้าใช้ SSH บนคอมพิวเตอร์ของฉันฉันจะสามารถเข้าถึงคอมพิวเตอร์ได้หรือไม่
Gilles 'หยุดชั่วร้าย'

7

คุณไม่ต้องการอะไรเป็นพิเศษ ตั้งแต่xclipทำงานมากกว่าstdinเพียงแค่

ssh remotehost xclip < myconf.conf

ทำไมมันจะต้องได้รับการแก้ไขด้วยsed? sshโปร่งใสกับข้อมูลเมื่อไม่ได้ใช้เป็นเทอร์มินัลและมักใช้ในท่อเช่น

tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`

มีวิธีการทำจากภายในเซสชัน SSH ที่มีอยู่หรือไม่ ฉันไม่ต้องการเปิดหน้าต่างเทอร์มินัลอื่นถ้าฉันมีหนึ่งเปิดเครื่องในคำถาม
Naftuli Kay

และ sed` มีเพียงตัวอย่างถ้าฉันต้องการดำเนินการใด ๆ ในstdinก่อนที่จะคัดลอกไปยังคลิปบอร์ดฉันต้องการตัวเลือกที่
Naftuli Kay

ไม่ไม่มีวิธีการฉีดข้อมูลลงในsshเซสชันที่มีอยู่(มันจะไม่ปลอดภัยถ้าคุณทำได้) คุณสามารถตั้งค่าssh ControlMasterสิ่งที่จะเชื่อมต่อที่เพิ่มเติม multiplex มากกว่าที่มีอยู่ แต่มันไม่ใช่สิ่งที่สำหรับผู้เริ่มต้นจริงๆและคุณยังคงทำแบบเดียวกันนั้นโดยการเปลี่ยนไปยังสถานีท้องถิ่นอื่นและเรียกใช้คำสั่งดังกล่าวข้างต้น (ซึ่งไม่ได้เปิดใหม่ หน้าต่างเทอร์มินัล)
geekosaur

@NaftuliKay สำหรับวิธีการแก้ปัญหาว่างานภายในเซสชั่น SSH ปกติของคุณให้ดูคำตอบของฉัน
tanius

5

นี่คือวิธีที่คุณจะทำบน OSX จากเครื่องท้องถิ่นของคุณ

ssh remotehost.com "<some/file.txt" | pbcopy

3

หากเครื่องท้องถิ่นของคุณกำลังเรียกใช้ windows (7+) คุณสามารถใช้สิ่งนี้จาก CommandLine:

ssh user@server cat /home/user/file | clip

1

~ / .ssh / config:

Host REMOTEHOST
    ...
    ForwardX11 yes

/ etc / SSH / sshd_config:

X11Forwarding yes

ทุบตี:

$ xclip -o | ssh REMOTEHOST 'DISPLAY=:0 xclip -i'

1

คล้ายกับโซลูชัน @ d-raev และ @ william-casarin แต่แตกต่างกันดังนั้นฉันจึงแบ่งปันสิ่งที่ได้ผลกับฉัน

คำสั่ง

ssh user@host "cat <myconffile.conf" | xclip -sel clip

คำอธิบาย

นี่คือการใช้sshเพื่อสร้างอุโมงค์ที่ปลอดภัยเข้าสู่ระบบuser@ hostหรือipจากนั้นดำเนินcatการพิมพ์เนื้อหาของ<myconffile.confไปที่stdoutแล้วไปที่คำสั่งxclip -sel clipบนเครื่องท้องถิ่นของคุณซึ่งวางเนื้อหาของ<myconffile.confลงในคลิปบอร์ดบนเครื่องท้องถิ่นของคุณ

ตัวอย่างการใช้งานจริง

ฉันใช้โครงสร้างคำสั่งนี้สำหรับงานต่าง ๆ เช่นการวางคีย์ ssh ลงใน github (อนุญาตให้ใช้ ctrl-V หรือวางแบบง่าย ๆ หลังจากที่ฉันรันคำสั่ง) ด้วย Bash บน Ubuntu 16.04 และ 18.04 ตรวจสอบman ssh, man catและman xclipสำหรับพฤติกรรมและตัวเลือกในรายละเอียด


วิธีนี้ใช้ได้กับการคัดลอกจากเซิร์ฟเวอร์ headless ซึ่งxclipจะไม่ทำงานเนื่องจากไม่มี X
tanius

0

ฉันมีปัญหาที่คล้ายกันกับlxterminalการวางคลิปบอร์ดของ LUbuntu (ทดสอบขั้วต่างๆ) ไปยังsshเซสชัน หากคลิปบอร์ดมีมากกว่า 100 ไบต์การหมดเวลาของเซสชันจะล้มเหลว

ถ้าฉันเชื่อมต่อผ่าน ssh ไปยังเซิร์ฟเวอร์ CentOS 5.x เกือบทุกเครื่องแล้วเชื่อมต่อกับเซิร์ฟเวอร์เป้าหมายการวางคลิปบอร์ดจะทำงานได้โดยไม่มีปัญหาสำหรับขนาดข้อมูลที่เหมาะสม


0

การคัดลอกจากเซิร์ฟเวอร์ headless ไปยังคลิปบอร์ดในเครื่องจากในเซสชัน SSH ปกติ

  1. ติดตั้งncatบนเครื่องท้องถิ่นและระยะไกลของคุณ (ในเครื่องระยะไกลของคุณคุณสามารถทำได้ด้วยncหรือเปล่าtelnetแต่ในเครื่องท้องถิ่นเราต้องการตัวเลือกในการรันคำสั่ง ( -c/ -e) ซึ่งไม่สามารถใช้ได้ในncการแจกแจงแบบปกติเช่น Debian และ Ubuntu)

    apt install nmap
    
  2. บนเครื่องโลคัลของคุณตั้งค่าเซิร์ฟเวอร์ให้ฟังบนโลคัลอินเตอร์เฟสที่จะคัดลอกเนื้อหาที่เข้ามาในพอร์ต 10009 ไปยังคลิปบอร์ด X ของคุณ:

    ncat --keep-open --listen --sh-exec "xclip -selection clipboard" localhost 10009
    

    หรือใช้ชวเลขรุ่นเทียบเท่า:

    ncat -klc "xclip -sel c" localhost 10009
    
  3. SSH ลงในเครื่องระยะไกลในลักษณะที่อุโมงค์ย้อนกลับถูกสร้างขึ้นจากพอร์ต 1,0008 ของเครื่องระยะไกลไปยังพอร์ต 10009 บนเครื่องท้องถิ่นของคุณ (ที่เซิร์ฟเวอร์ของคุณกำลังรับฟัง) คุณสามารถใช้เซสชัน SSH นั้นสำหรับการทำงานปกติของคุณ

    ssh -R 10008:localhost:10009 user@example.com
    
  4. เมื่อคุณต้องการคัดลอกเนื้อหาของไฟล์จากเครื่องระยะไกลไปยังคลิปบอร์ดท้องถิ่นดำเนินการในเปลือก SSH:

    ncat --send-only localhost 10008 < file.txt
    

    และแน่นอนว่ามันดีกว่าเมื่อบรรจุเป็นเชลล์ลัดหรือสคริปต์ เราสามารถเรียกมันว่าrclipสำหรับ "[คัดลอกไป] คลิปบอร์ดระยะไกล" xclipในการเปรียบเทียบกับที่รู้จักกันดี

ข้อดี

  • ไม่จำเป็นต้องเปิดเซสชัน SSH อื่นไปยังเครื่องระยะไกล

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

ความปลอดภัย

เราทำncat -l localhost 10009เพื่อเซิร์ฟเวอร์ซึ่งหมายความว่าฟังเฉพาะในอินเทอร์เฟซเครือข่ายด้วยที่localhostอยู่ IP อินเทอร์เฟซแบบวนซ้ำภายในเครื่องนี้อนุญาตการเชื่อมต่อจากเครื่องของคุณเอง (รวมถึงในกรณีนี้การย้อนกลับช่องสัญญาณผ่าน SSH) ดังนั้นแม้ว่าคุณจะไม่ได้อยู่หลังไฟร์วอลล์พอร์ต 10009 ของคุณจะไม่เปิดเผยต่อใครก็ตามบนอินเทอร์เน็ต

แหล่ง

ดัดแปลงมาจากส่วนสำคัญdergachev / ssh-forward-clipboard.mdเพื่อใช้งานกับ Linux ส่วนสำคัญนั้นยังมีคำแนะนำสำหรับวิธีทำให้อุโมงค์กลับด้าน SSH เป็นค่าเริ่มต้น


-1

https://secure.wikimedia.org/wikipedia/en/wiki/Base64

คุณสามารถแปลงข้อมูลคลิปบอร์ดด้วยข้อความ Base64 เป็น ASCII จากนั้นคุณสามารถผลักดันสิ่งนั้นผ่านการเชื่อมต่อ SSH ที่มีอยู่แล้ว


ทำไมต้องเปลี่ยนเป็นอะไร มันเป็นข้อความอยู่แล้วในกรณีนี้และแม้ว่ามันจะเป็นเลขฐานสองก็คงไม่มีเหตุผลที่คุณจะไม่สามารถส่งข้ามสายส่งแบบนี้ได้
Caleb

คลิปบอร์ดอาจมีข้อมูลไบนารีตัวอย่างเช่นแอปพลิเคชันที่รวบรวม
LanceBaynes

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