web-dev-qa-db-ja.com

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

これが私の使用例です:

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

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

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

素晴らしいだろう。これを可能にする何かが存在しますか?

34
Naftuli Kay

X転送でsshを実行する場合、これは透過的です。リモートコマンド(xclipを含む)は、Xサーバー(キーボードを含む)にアクセスできます。 ForwardX11 yes~/.ssh/configが、サーバーにX11Forwarding yessshd_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を開くのと同じくらい簡単です。

特別なことは何も必要ありません。 xclipstdin上で機能するため、

ssh remotehost xclip < myconf.conf

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

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

ローカルマシンからOSXでそれを行う方法は次のとおりです

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

ローカルマシンでwindows(7+)を実行している場合は、これをCommandLineから使用できます。

ssh user@server cat /home/user/file | clip
3
d.raev

@ 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の内容をローカルマシンのクリップボードに配置します。

実際の使用例

Ubuntu 16.04および18.04のBashで、sshキーをgithubに貼り付ける(単純なctrl-Vまたはコマンドの実行後に選択を貼り付ける)などのタスクにこのコマンド構造を使用します。動作とオプションの詳細については、man sshman catman xclipをご覧ください。

1

〜/ .ssh/config:

Host REMOTEHOST
    ...
    ForwardX11 yes

/ etc/ssh/sshd_config:

X11Forwarding yes

bash:

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

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

  1. ローカルマシンとリモートマシンにncatをインストールします。 (リモートマシンではncまたはプレーンtelnetでも実行できますが、ローカルマシンではコマンドを実行するオプション(-c/-e)これは、DebianやUbuntuなどの通常のディストリビューションでは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 [email protected]
    
  4. ファイルのコンテンツをリモートマシンからローカルクリップボードにコピーする場合は、SSHシェルで実行します。

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

    そしてもちろん、シェルショートカットまたはスクリプトとしてパッケージ化した方が便利です。よく知られている rclip と同様に、 "[copy to] remote clipboard"をxclipと呼ぶことができます。

利点

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

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

セキュリティ

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

ソース

Gistから変更 dergachev/ssh-forward-clipboard.md Linuxで動作するように。その要旨には、SSHリバーストンネルをデフォルトにする方法の説明も含まれています。

0
tanius

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

Sshを介してほぼすべてのCentOS 5.xサーバーに接続してからターゲットサーバーに接続すると、妥当なデータサイズであれば、クリップボードの貼り付けは問題なく機能します。

0
Vasyl