これが私の使用例です:
scp
をローカルマシンにコピーできます。リモートxclip
をローカルXサーバーのクリップボードにコピーできるstdin
などのプログラムを使用する方法はありますか?以下の影響があるもの:
cat myconffile.conf | sed {...} | copy-over-ssh-to-local-clipboard
素晴らしいだろう。これを可能にする何かが存在しますか?
X転送でsshを実行する場合、これは透過的です。リモートコマンド(xclip
を含む)は、Xサーバー(キーボードを含む)にアクセスできます。 ForwardX11 yes
に~/.ssh/config
が、サーバーにX11Forwarding 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
を開くのと同じくらい簡単です。
特別なことは何も必要ありません。 xclip
はstdin
上で機能するため、
ssh remotehost xclip < myconf.conf
sed
で変更する必要があるのはなぜですか? ssh
は、ターミナルとして使用されていない場合はデータに対して透過的であり、次のようなパイプラインで一般的に使用されます
tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`
ローカルマシンからOSXでそれを行う方法は次のとおりです
ssh remotehost.com "<some/file.txt" | pbcopy
ローカルマシンでwindows(7+)を実行している場合は、これをCommandLineから使用できます。
ssh user@server cat /home/user/file | clip
@ d-raevや@ william-casarinのソリューションと非常によく似ていますが、それは異なるため、うまくいったことを共有します。
コマンド
ssh user@Host "cat <myconffile.conf" | xclip -sel clip
説明
これはssh
を使用して安全なトンネルを作成し、user
@ Host
またはip
にログインしてから、cat
を実行して内容を出力します<myconffile.conf
をstdout
に変換してから、ローカルマシンのコマンドxclip -sel clip
にパイプし、<myconffile.conf
の内容をローカルマシンのクリップボードに配置します。
実際の使用例
Ubuntu 16.04および18.04のBashで、sshキーをgithubに貼り付ける(単純なctrl-Vまたはコマンドの実行後に選択を貼り付ける)などのタスクにこのコマンド構造を使用します。動作とオプションの詳細については、man ssh
、man cat
、man xclip
をご覧ください。
〜/ .ssh/config:
Host REMOTEHOST
...
ForwardX11 yes
/ etc/ssh/sshd_config:
X11Forwarding yes
bash:
$ xclip -o | ssh REMOTEHOST 'DISPLAY=:0 xclip -i'
通常のSSHセッション内からヘッドレスサーバーからローカルクリップボードにコピーします:
ローカルマシンとリモートマシンにncat
をインストールします。 (リモートマシンではnc
またはプレーンtelnet
でも実行できますが、ローカルマシンではコマンドを実行するオプション(-c
/-e
)これは、DebianやUbuntuなどの通常のディストリビューションではnc
で利用できません。)
apt install nmap
ローカルマシンで、ローカルインターフェースでリッスンするサーバーを設定します。このサーバーは、ポート10009から入ってくるコンテンツをXクリップボードにコピーします。
ncat --keep-open --listen --sh-exec "xclip -selection clipboard" localhost 10009
または、同等の略記バージョンを使用します。
ncat -klc "xclip -sel c" localhost 10009
リモートマシンのポート10008からローカルマシンのポート10009(サーバーがリッスンしている)への逆トンネルが確立されるように、リモートマシンにSSHで接続します。そのSSHセッションを通常の作業に使用できます。
ssh -R 10008:localhost:10009 [email protected]
ファイルのコンテンツをリモートマシンからローカルクリップボードにコピーする場合は、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リバーストンネルをデフォルトにする方法の説明も含まれています。
クリップボードをlxterminal
セッションに貼り付けるLUbuntuのssh
(さまざまな端末でテスト済み)でも同様の問題があります。クリップボードのサイズが約100バイトを超えると、セッションがタイムアウトして失敗します。
Sshを介してほぼすべてのCentOS 5.xサーバーに接続してからターゲットサーバーに接続すると、妥当なデータサイズであれば、クリップボードの貼り付けは問題なく機能します。