SSH経由でコピー&ペーストするクリップボードのリモート共有

ssh経由で操作するLinuxリモートホストのクリップボードは、OSC52というターミナル機能があればローカルのクリップボードに書き込めます。

例えばリモートホストでtmuxを利用していれば、送信側は動作します。
受信側はローカルホストのターミナルソフトの機能しだいで、たとえばAlacrittyは対応しています。

そのため、Alacritty上でssh接続したホストがtmux環境であれば、とくに設定することなくリモートセッションのコピー文字列をローカルOSでペーストできます。

OSC52が機能していない環境では、X Windowの機能でローカルPCと共有できます。セキュリティ面ではOSC52を使った方が有利でしょう。
セットアップを完結できれば、リモートでコピーした文字列をローカルでペーストすることやその逆も可能です。

なお、このセットアップはX Windowを前提としており、ローカルPC側は現時点でLinuxディストリビューションの多くは比較的手軽にセットアップできます。
Macの場合は、XQuartzを追加セットアップする必要があるようです(未確認)。また、LinuxでもWaylandを採用しているディストリビューションは動作しないでしょう。

主な構成

sshdとsshクライアントの各設定で、X11Forwardを有効にして接続します。

  • リモートホストにxauthとxselをインストールする(Debianの場合、同名パッケージ)。同名のコマンドが動作すればOK
  • sshdの X11Forwardingを有効にする
  • sshクライアント接続の設定で ForwardX11を有効にする( -Xオプション)

X11Forwardが適切にセットアップできている場合、リモートホストの環境変数DISPLAYが自動的に設定されます。
以下のコマンドで確認できます。

$ set | grep DISPLAY
DISPLAY=localhost:10.0
# セットアップに不備がある場合、何も表示しない

設定

sshd

リモートホストのsshd_configに以下の設定を追加します。sshd再起動で有効になります。

X11Forwarding yes

sshクライアント

ローカルPCの~/.ssh/configを編集し、該当するHostの設定でForwardX11を有効にします。

Host some_remote_host
ForwardX11 yes

なお、SSHポートフォワードを併用している場合、ターゲットホストのみ追加が必要です。プロキシ用の中間ホスト設定は変更する必要がありません。

xselの動作確認

xselはXのクリップボードを操作するCLIで、xsel -biで標準入力からコピー、xsel -bで標準出力にペーストします。
たとえば、ローカルPCのGUIでコピー操作したうえで、リモートホストでxsel -b | moreなどを実行することで動作確認できるでしょう。

sshのX11Forwardingは、実際にはGUIアプリケーションをリモート転送できる機能ですが、xselはX11プロトコルを利用しているだけであり、リモートホストにGUIのウインドウシステムをフルセットアップする必要はありません。
また、転送データ量も比較的少ないため、多くの場合にはスローダウンすることもないでしょう。

リモートのターミナル操作でクリップボードを利用しやすくする設定としては、たとえばtmuxとxselの設定を追加するなどアプリケーション別の設定があります。
xselはクリップボード操作のデファクトであるため、実績は豊富です。

これにより、各アプリケーションのショートカットによって共有クリップボードのコピー&ペーストがかんたんに実行できます。

⁋ 2021/08/09↻ 2024/11/07
中馬崇尋
Chuma Takahiro