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はクリップボード操作のデファクトであるため、実績は豊富です。
これにより、各アプリケーションのショートカットによって共有クリップボードのコピー&ペーストがかんたんに実行できます。
Chuma Takahiro