1P by coderred 6시간전 | ★ favorite | 댓글과 토론

안녕하세요.

요즘 원격 서버에 SSH로 붙어서 Claude Code나 Codex 같은 터미널 도구를 쓰는 일이 많아졌는데, 이미지 넣는 과정이 생각보다 번거롭더라고요.

로컬에는 이미 스크린샷이 클립보드에 있는데, 원격 서버 입장에서는 그걸 알 방법이 없어서 매번 파일로 저장하고 scp로 올리고 경로를 다시 붙여넣어야 했습니다.

그게 귀찮아서 imgssh를 만들어봤습니다.

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

사용법은 일반 ssh 대신 imgssh로 접속하는 식입니다.

imgssh user@host  

그 상태에서 로컬 클립보드에 이미지가 있을 때 Ctrl+] 를 누르면, 이미지를 원격 /tmp에 올리고 현재 SSH 세션에 파일 경로를 입력해줍니다.

예를 들면 이런 식입니다.

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

Claude Code나 Codex 같은 CLI에 이미지 파일 경로를 넘길 때 쓰려고 만든 기능입니다.

처음에는 터미널별 플러그인 방식도 생각했는데, Ghostty처럼 플러그인 시스템이 없는 터미널도 있고, 터미널마다 따로 맞추는 것도 별로라서 그냥 ssh 자체를 감싸는 쪽으로 갔습니다.

중요하게 잡은 방향은 이겁니다.

  • 전역 키보드 후킹 없음
  • 백그라운드 데몬 없음
  • 리버스 터널 없음
  • 원격 서버에 설치할 것 없음
  • imgssh로 연 SSH 세션 안에서만 동작

그래서 탭을 여러 개 열어도 각 imgssh 프로세스가 자기 세션만 처리합니다. 예를 들어 한 탭에서 imgssh dev, 다른 탭에서 imgssh prod로 들어가 있으면 각 탭에서 누른 트리거는 해당 서버로만 업로드됩니다.

대신 nested SSH는 추적하지 않습니다. imgssh dev로 접속한 뒤 그 안에서 다시 ssh prod를 실행하면, 이미지는 여전히 dev 쪽으로 올라갑니다. 이건 일부러 범위를 좁혔습니다.

현재는 초기 버전이라 범위가 단순합니다.

  • Linux에서 테스트
  • OpenSSH 사용
  • PNG 클립보드 이미지
  • 기본 /tmp 업로드
  • quoted path 삽입
  • 업로드에는 별도 ssh 프로세스와 OpenSSH ControlPath를 사용

macOS는 코드상 pngpaste backend를 넣어두긴 했는데, 아직 직접 테스트는 못 했습니다.

비슷한 문제를 푸는 도구로 clipssh나 PasteHop도 있는데, imgssh는 one-shot 업로더나 터미널 통합 도구보다는 “ssh wrapper” 쪽에 가깝습니다.

아직 다듬을 부분이 많습니다. 특히 SSH 인자 처리, 터미널별 트리거 키, tmux/nvim 같은 환경에서의 UX는 더 테스트가 필요합니다.

써보시고 이상한 케이스나 더 나은 방식 있으면 의견 부탁드립니다.