SSH를 통해 입력을 클립 보드에 복사 하시겠습니까?


33

내 사용 사례는 다음과 같습니다.

  • 나는 종종 작업을 위해 SSH를 통해 다른 컴퓨터에 연결되어 있으며 종종 예제를 작성하고 텍스트를 공유하기 위해 서버에서 로컬로 실행되는 편집기로 문서 / 텍스트를 복사하여 붙여 넣어야합니다.
  • 텍스트가 충분히 작은 경우 종종 터미널 프로그램 (현재 그놈 터미널)의 출력을 복사하여 붙여 넣기 만하면됩니다.
  • 그러나 전체 문서와 관련하여 내 옵션은 상당히 제한적입니다. 청크 단위로 문서를 복사하거나 scp로컬 컴퓨터로 복사 할 수 있습니다 .

xclip원격 stdin으로 로컬 X 서버의 클립 보드 에 복사 할 수 있는 프로그램을 사용하는 방법이 있습니까? 다음과 같은 효과가 있습니다.

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

대단 할 것입니다. 이것을 가능하게하는 것이 있습니까?

답변:


20

X 전달을 사용하여 ssh를 실행하면 투명합니다. 원격 명령 (포함 xclip)은 X 서버 (키보드 포함 )에 액세스 할 수 있습니다. 되어 있는지 확인하십시오 ForwardX11 yes당신에 ~/.ssh/configX11Forwarding yes서버에 sshd_config(당신의 분포에 따라,이 옵션은 기본적으로 설정 또는 해제 할 수있다).

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

SSHfs 를 사용하여 로컬 컴퓨터에 원격 디렉토리를 마운트 하거나 Tramp 를 사용하여 Emacs에서 원격 파일을 여는 등의 편리한 원격 파일 작업 방법이 있습니다 . ssh 및 FUSE 설정 및 SSHfs를 설치 한 경우 SSHfs는 쉽습니다 mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver. ssh를 설정하고 Emacs를 설치했다면 Tramp를 여는 것만 큼 쉽습니다 /myserver:/path/to/file.


1
conf 파일에서 기본적으로 이런 방식으로 실행하는 보안 취약점이 있습니까?
Naftuli Kay

아니요. 모든 x11 트래픽은 SSH 채널을 통해 전달됩니다.
Shadur

2
@TKKocheran 실제로는 아닙니다. 서버 측에서는 없습니다. 클라이언트 쪽에서는 서버 관리자에게 클라이언트로가는 길을 제공한다는 점에서 조금 있지만 99 %의 경우 서버 관리자에게는 길이 있습니다. 볼 사람이 내 컴퓨터에 SSH에 로그인되어있는 경우, 나는 그들의 컴퓨터에 액세스 할 수 있습니까?
Gilles 'SO- 악한 중지'

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기존에 걸쳐 멀티 플렉스 추가 연결에 물건을,하지만 정말 초보자를위한 것이 아닙니다 그리고 당신은 여전히 다른 로컬 터미널로 전환하고 않는 (위의 명령을 실행하여, 나중에 그것을 같은 방식으로 할 수 없는 새로운를 엽니 다 터미널 창).
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.confstdout다음 명령에 있다는 배관 xclip -sel clip의 내용을 배치 로컬 컴퓨터에 <myconffile.conf로컬 컴퓨터의 클립 보드에.

실제 예제 사용법

우분투 16.04 및 18.04에서 Bash를 사용하여 ssh 키를 github에 붙여 넣는 것과 같은 작업 (명령을 실행 한 후 간단한 ctrl-V 또는 붙여 넣기 선택 허용)과 같은 작업 에이 명령 구조를 사용합니다. 체크 아웃 man ssh, man cat그리고 man xclip행동과 옵션에 대한 자세한 내용은.


이것은 X가 없기 때문에 실행되지 않는 헤드리스 서버 에서 복사 하는 경우에도 작동합니다.xclip
tanius

0

lxterminal클립 보드를 ssh세션에 붙여 넣는 LUbuntu (다양한 터미널 테스트) 와 비슷한 문제가 있습니다. 클립 보드에 약 100 바이트가 넘는 경우 세션 시간이 초과되어 실패합니다.

ssh를 통해 거의 모든 CentOS 5.x 서버에 연결 한 다음 대상 서버에 연결하면 클립 보드 붙여 넣기가 합리적인 데이터 크기에 문제없이 작동합니다.


0

일반적인 SSH 세션 내부에서 헤드리스 서버에서 로컬 클립 보드로 복사 :

  1. ncat로컬 및 원격 시스템에 설치 하십시오. (원격 컴퓨터에서는 nc또는 plain으로 도 할 수 telnet있지만 로컬 컴퓨터 에서는 데비안 및 우분투와 같은 일반적인 배포 에서는 사용할 수없는 명령 ( -c/ -e) 을 실행하는 옵션이 필요합니다 nc.)

    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. 원격 시스템의 포트 10008에서 로컬 시스템 (서버가 청취하는)의 포트 10009로 역방향 터널이 설정되는 방식으로 원격 시스템으로 SSH합니다. 정상적인 작업에 SSH 세션을 사용할 수 있습니다.

    ssh -R 10008:localhost:10009 user@example.com
    
  4. 원격 컴퓨터에서 로컬 클립 보드로 파일 내용을 복사하려면 SSH 셸에서 실행하십시오.

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

    물론 셸 바로 가기 또는 스크립트로 패키지 할 때 더 좋습니다. 우리 rclip는 잘 알려진 것과 유사하게 "[copy to] remote clipboard"라고 부를 수 xclip있습니다.

장점

  • 원격 시스템에 다른 SSH 세션을 열 필요가 없습니다.

  • xclip원격 컴퓨터에서는 필요 하지 않으므로 X가없는 헤드리스 서버이므로 설치할 수 없거나 사용할 수없는 경우 작동합니다.

보안

우리는 ncat -l localhost 10009서버를 위해 작업 합니다. 즉, localhostIP 주소를 가진 네트워크 인터페이스에서만 수신합니다 . 이 로컬 루프 인터페이스는 자신의 컴퓨터 (이 경우 SSH를 통해 역방향 터널링 된 연결 포함)의 연결 만 허용합니다. 따라서 방화벽 뒤에 있지 않더라도 포트 10009는 인터넷상의 다른 사람에게 노출되지 않습니다.

출처

Linux에서 작동 하도록 요점 dergachev / ssh-forward-clipboard.md 에서 채택되었습니다 . 이 요지에는 SSH 리버스 터널을 기본값으로 설정하는 방법에 대한 지침도 포함되어 있습니다.


-1

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

Base64를 사용하여 클립 보드 데이터를 ASCII 텍스트로 변환 할 수 있습니다. 그런 다음 이미 존재하는 SSH 연결 내부를 통해 푸시 할 수 있습니다.


왜 어떤 것으로 변환합니까? 이 경우 이미 텍스트이며 바이너리 일지라도 파이프 라인을 통해 전송할 수없는 이유는 없습니다.
Caleb

클립 보드는 이진 데이터를 포함 할 수 있습니다. 예 : 컴파일 된 응용 프로그램
LanceBaynes

그렇습니다. 그러나 왜 이것이 문제가됩니까? 이진 데이터는 파이프 및 ssh 터널을 통해 전송 될 수 있습니다.
Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.