今までsshしたリモートサーバ上でコマンド実行したときの結果出力とかは、 tmuxのコピーモードとかを駆使して、Macのクリップボードに送ってたんですが もっと手軽に出来る方法があったのでGitHubにまとめてみた。
仕組みの説明
- Mac上で、受け取った内容をクリップボード(pbcopy)に渡す
LaunchAgent
を作って起動 - リモートサーバ上の出力を受け取るスクリプト
rpbcopy(nc)
に渡す - sshの
RemoteForward
を利用して、リモートサーバでrpcopy(nc)
に渡された内容をMac上のLaunchAgent
に渡す - Mac上の
LaunchAgent
が受け取ったデータをMacのpbcopy(クリップボード)
に入れる pbpaste
などで貼り付けが出来る
図にすると下記のような感じ
1 2 3 4 5 6 7 8 |
|
導入方法
動作検証環境
- リモートサーバ CentOS 6.4、Fedora 19
- ローカルMac OS X 10.9.1
glidenote/rpbcopyに各種ファイルをまとめているので、 cloneしてくるのが早いです。
1
|
|
Mac側の設定
LaunchAgentを起動
2224
ポートで待ち受けて、受け取った内容をクリップボードに渡すLaunchAgentを用意。
同梱のpbcopy.plist
を~/Library/LaunchAgents/pbcopy.plist
に設置して、下記で起動
1
|
|
停止する場合は下記
1
|
|
~/.ssh/config
の設定
リモートサーバの2224
ポートをフォワーディングするので、
~/.ssh/config
に
1
|
|
を追加。
~/.CFUserTextEncoding
の設定
必ず必要な作業ではありませんが、UTF-8の内容を送ると文字化けが発生する場合、転送が上手くされない場合は
同梱の.CFUserTextEncoding
を~/.CFUserTextEncoding
に設置することで回避出来ると思います。
~/.CFUserTextEncoding
を編集することで他に影響が及ぶ場合があるので、
必ずバックアップを取り、自己責任で編集お願いします。
リモートサーバ(CentOS)側の設定
ncの導入
nc(netcat)
が無いと使えないのでnc
を導入。(nc
のバージョンが古いと-C
オプションが存在しない場合があります。)
1
|
|
rpbcopyスクリプトの設置
同梱のrpbcopy
を~/bin/rpbcopy
などPATH
が通っている場所に設置して権限を付与
1
|
|
使い方
リモートサーバにsshログイン。 手元Macのクリップボードに送りたいファイルやコマンドの出力を、リモートサーバ上で
1 2 3 4 5 6 7 8 9 10 11 |
|
という感じでrpbcopyに渡すと、手元のMacのクリップボードに渡されるので
Mac側でpbpaste
や貼り付けが出来る。
補足
~/.bash_profile
や~/.zsh_profile
などに
1
|
|
とaliasを追加して、pbcopy
でも使えるようにしておけば、
リモートサーバとローカルサーバを意識せずに利用出来る。
トラブルシューティング
導入の際にハマったところをまとめておく。
Mac側
launchctl load/unload
を実行するとCould not open job overrides database at: /private/var/db/launchd.db/com.apple.launchd/overrides.plist: 13: Permission denied
と出る。
tmuxを起動している状態でlaunchctl load/unload
を実行するとPermissionのエラーが出てしまうことがあるようです。ChrisJohnsen/tmux-MacOSX-pasteboardを利用することで回避出来る模様。
LaunchAgentは動作しているか、2224ポートは開いているか確認
1
|
|
LaunchAgent
=> pbcopy
とデータが渡っているか。
Macのncの場合オプションは-c
なので注意
1 2 |
|
LaunchAgent
=> pbcopy
と日本語のデータが渡っているか。
Macのncの場合オプションは-c
なので注意.
1 2 |
|
駄目な場合は、~/.CFUserTextEncoding
を同梱のものに入れ替えるてどうか確認。
CentOS側
ncが入っているか
1
|
|
2224ポートと疎通が出来ているか。SSH RemoteForwardが出来ているか
1
|
|
SSH RemoteForward経由でMacのpbpasteにデータを渡せているか
1
|
|
mac側でpbpaste
を実行してみてどうか。
普段私が常用しているmoshだとこれが利用出来ないので、いい方法がないか思案中。
とりあえず、ターミナル作業用のmosh接続
とは別でrpbcopy専用のssh接続
を作っておくことで利用してる。