SSH経由で入力をクリップボードにコピーしますか?


33

これが私の使用例です:

  • 私は仕事のためにSSHで他のコンピューターに接続していることが多く、サーバーからドキュメント/テキストをコピーして、ローカルで実行しているエディターに貼り付けて例を作成し、テキストを共有する必要があります。
  • 多くの場合、テキストが十分に小さい場合は、単にターミナルプログラム(現時点ではgnome-terminal)から出力をコピーして貼り付けます。
  • しかし、ドキュメント全体に関して言えば、私の選択肢はかなり限られています。ドキュメントをチャンクごとにコピーするかscp、ローカルマシンにコピーします。

ローカルXサーバーのクリップボードにxclipリモートでコピーできるようなプログラムを使用する方法はありstdinますか?効果のあるもの:

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

素晴らしいでしょう。これを可能にするものはありますか?

回答:


20

X転送でsshを実行する場合、これは透過的です。リモートコマンド(を含むxclip)はXサーバー(キーボードを含む)にアクセスできます。あなたが持っていることを確認しますForwardX11 yesあなたに~/.ssh/configしてX11Forwarding yes、サーバにsshd_config(あなたのディストリビューションに応じて、これらのオプションはデフォルトでオンまたはオフにすることができます)。

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

より便利なリモートファイルを操作する方法は他にもあります。たとえば、SSHfsを使用してローカルマシンにリモートディレクトリをマウントしたりEmpsTrampを使用してリモートファイルを開いたりします。sshとFUSEがセットアップされ、SSHfsがインストールされている場合、SSHfsは簡単mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserverです。sshをセットアップしてEmacsをインストールしている場合、Trampは開くのと同じくらい簡単/myserver:/path/to/fileです。


1
confファイルでデフォルトでこのように実行することに対するセキュリティ上の脆弱性はありますか?
ナフトゥリケイ

いいえ。すべてのx11トラフィックはSSHチャネルを介して転送されます。
シャドゥール

2
@TKKocheranそうでもない。サーバー側では、なし。クライアント側では、サーバー管理者にクライアントへの道を提供するという点で少しですが、99%の場合、サーバー管理者にはとにかく道があります。参照誰かが自分のコンピュータ上でSSHに署名されている場合、私は自分のコンピュータにアクセスすることができますか?
ジル 'SO-悪であるのをやめる'

7

特別なものは必要ありません。以来、xclip以上の作品stdinだけで、

ssh remotehost xclip < myconf.conf

なぜそれを変更する必要があるのsedでしょうか? ssh端末として使用されない場合はデータに対して透過的であり、次のようなパイプラインで一般的に使用されます

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

既存のSSHセッション内からそれを行う方法はありますか?問題のマシンで既に開いているターミナルウィンドウがある場合は、別のターミナルウィンドウを開く必要はありません。
ナフトゥリケイ

また、sed`は単なる例stdinです。クリップボードにコピーする前に処理を実行したい場合は、そのオプションが必要です。
Naftuliケイ

いいえ、既存のsshセッションにデータを注入する方法はありません(可能な場合、あまり安全ではありません)。あなたは、設定することができssh ControlMaster、既存のものの上に多重追加接続するものを、それは本当に初心者のためのものではないですし、あなたはまだ別のローカル端末に切り替えるとんどの(上記のコマンドを実行して、その後それを同じように行いません新しいを開きます端末ウィンドウ)。
ギーコサウルス

@NaftuliKay通常のSSHセッション内で機能するソリューションについては、私の答えをご覧ください。
タニウス


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、@をhostip、その後の実行、catの内容を印刷する<myconffile.confにはstdout、コマンドにすることを、配管xclip -sel clipの内容を置くローカルマシン上の<myconffile.confローカルマシン上でクリップボードに。

実際の使用例

Ubuntu 16.04および18.04でBashを使用して、sshキーをgithubに貼り付ける(コマンドを実行した後、単純なctrl-Vまたは貼り付け選択を許可する)などのタスクにこのコマンド構造を使用します。チェックアウトman sshman catおよびman xclip行動およびオプションの詳細については。


このコピーにも、作品からヘッドレスサーバ、xclip何X.がないように実行されません
tanius

0

LUbuntuのlxterminal(さまざまな端末でテスト済み)sshセッションにクリップボードを貼り付ける場合にも同様の問題があります。クリップボードに約100バイト以上ある場合、セッションはタイムアウトして失敗します。

sshを介してほとんどすべてのCentOS 5.xサーバーに接続してからターゲットサーバーに接続すると、適切なデータサイズに対してクリップボードペーストは問題なく機能します。


0

通常のSSHセッション内から、ヘッドレスサーバーからローカルクリップボードにコピーします。

  1. ncatローカルおよびリモートマシンにインストールします。(リモートマシンでは、ncまたはplain でも実行できますがtelnet、ローカルマシンでは、DebianやUbuntuなどの通常のディストリビューションでは利用できないコマンド(-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よく知られているに似て「リモートクリップボードにコピー」するために呼び出すことができますxclip

長所

  • リモートマシンへの別のSSHセッションを開く必要はありません。

  • xclipリモートマシンには必要ないので、Xのないヘッドレスサーバーであるため、インストールできないか使用できない場合に機能します。

セキュリティ

我々はやるncat -l localhost 10009、それだけでネットワークインタフェース上でリッスンを意味し、サーバー用のlocalhostIPアドレス。このローカルループインターフェイスは、自分のマシン(この場合、SSH経由でリバーストンネリングされたものを含む)からの接続のみを許可します。したがって、ファイアウォールの内側にいなくても、ポート10009はインターネット上の誰にも公開されません。

ソース

主旨から適応dergachev / ssh-forward-clipboard.md Linux用の作業に。その要点には、SSHリバーストンネルをデフォルトにする方法の指示も含まれています。


-1

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

Base64のクリップボードデータをASCIIテキストに変換できます。次に、既存のSSH接続内でそれをプッシュできます。


何に変換するのですか?この場合は既にテキストであり、バイナリであったとしても、このようなパイプラインを介して送信できなかった理由はありません。
カレブ

クリップボードにはバイナリデータを含めることができます。例:コンパイル済みアプリケーション
-LanceBaynes

はい、できますが、なぜそれが問題になるのでしょうか?バイナリデータは、パイプおよびsshトンネルを介して転送できます。
カレブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.