สวัสดีครับ

ช่วงนี้มีโอกาสต้องต่อเข้าเซิร์ฟเวอร์ระยะไกลผ่าน SSH เพื่อใช้เครื่องมือบนเทอร์มินัลอย่าง Claude Code หรือ Codex บ่อยขึ้น แต่ขั้นตอนการใส่ภาพกลับยุ่งยากกว่าที่คิดครับ

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

เพราะมันน่ารำคาญ เลยลองทำ imgssh ขึ้นมาครับ

GitHub:
https://github.com/coderredlab/imgssh

วิธีใช้งานคือเชื่อมต่อด้วย imgssh แทน ssh ปกติ

imgssh user@host  

ในสถานะนั้น ถ้ามีภาพอยู่ในคลิปบอร์ดของเครื่องโลคัลแล้วกด Ctrl+] ระบบจะอัปโหลดภาพไปยัง /tmp บนเครื่องรีโมต แล้วพิมพ์พาธไฟล์ลงใน SSH session ปัจจุบันให้โดยอัตโนมัติ

ตัวอย่างจะเป็นลักษณะนี้

'/tmp/imgssh-20260425-142744-a8f39c.png'  

ฟีเจอร์นี้ทำมาเพื่อใช้ส่งพาธไฟล์ภาพให้กับ CLI อย่าง Claude Code หรือ Codex

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

แนวทางสำคัญที่ตั้งไว้มีดังนี้

  • ไม่มีการ hook คีย์บอร์ดทั้งระบบ
  • ไม่มี background daemon
  • ไม่มี reverse tunnel
  • ไม่ต้องติดตั้งอะไรบนเซิร์ฟเวอร์ระยะไกล
  • ทำงานเฉพาะภายใน SSH session ที่เปิดด้วย imgssh เท่านั้น

ดังนั้นถึงจะเปิดหลายแท็บ แต่ละโปรเซสของ imgssh ก็จะจัดการเฉพาะ session ของตัวเอง เช่น ถ้าแท็บหนึ่งต่อด้วย imgssh dev และอีกแท็บต่อด้วย imgssh prod ทริกเกอร์ที่กดในแต่ละแท็บก็จะอัปโหลดไปยังเซิร์ฟเวอร์ของแท็บนั้นเท่านั้น

อย่างไรก็ตาม ระบบไม่ได้ติดตาม nested SSH ถ้าต่อเข้า imgssh dev แล้วจากในนั้นไปรัน ssh prod อีกครั้ง ภาพก็ยังจะถูกอัปโหลดไปฝั่ง dev เหมือนเดิม อันนี้เป็นการตั้งใจจำกัดขอบเขตไว้ครับ

ตอนนี้ยังเป็นเวอร์ชันแรก ขอบเขตจึงยังเรียบง่าย

  • ทดสอบบน Linux
  • ใช้ OpenSSH
  • รองรับภาพในคลิปบอร์ดแบบ PNG
  • อัปโหลดไปยัง /tmp เป็นค่าเริ่มต้น
  • แทรกพาธแบบ quoted
  • การอัปโหลดใช้โปรเซส ssh แยกต่างหากและใช้ OpenSSH ControlPath

ฝั่ง macOS มีใส่ backend สำหรับ pngpaste ไว้ในโค้ดแล้ว แต่ยังไม่ได้ทดสอบด้วยตัวเองครับ

เครื่องมือที่แก้ปัญหาใกล้เคียงกันก็มี clipssh หรือ PasteHop แต่ imgssh จะใกล้เคียงกับฝั่ง “ssh wrapper” มากกว่า one-shot uploader หรือเครื่องมือรวมเข้ากับเทอร์มินัล

ยังมีหลายจุดที่ต้องเกลาอีกมาก โดยเฉพาะการจัดการอาร์กิวเมนต์ของ SSH, ปุ่มทริกเกอร์ในแต่ละเทอร์มินัล, และ UX ในสภาพแวดล้อมอย่าง tmux/nvim ที่ยังต้องทดสอบเพิ่ม

ลองใช้กันดูได้ครับ ถ้าเจอเคสแปลก ๆ หรือมีวิธีที่ดีกว่านี้ก็ขอความคิดเห็นด้วยครับ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น