sshしたリモートサーバ上での出力やcat
してpipeで渡した内容を、ローカルMacのクリップボードに送ることが出来ます。
動作検証環境
- リモートサーバ CentOS 6.4
- ローカルMac OS X 10.9.1
+ - - - - - - - - -+ +- - - - - - - - - - - - - - - - -+
' Remote Server: ' ' Mac: '
' ' ' '
' +--------------+ ' ssh(RemoteForward) ' +--------------+ +--------+ '
' | rpbcopy(nc) | ' --------------------> ' | LaunchAgent | --> | pbcopy | '
' +--------------+ ' ' +--------------+ +--------+ '
' ' ' '
+ - - - - - - - - -+ +- - - - - - - - - - - - - - - - -+
2224
ポートで待ち受けて、受け取った内容をクリップボードに渡すLaunchAgentを用意。
同梱のpbcopy.plist
を~/Library/LaunchAgents/pbcopy.plist
に設置して、下記で起動
launchctl load ~/Library/LaunchAgents/pbcopy.plist
停止する場合は下記
launchctl unload ~/Library/LaunchAgents/pbcopy.plist
リモートサーバの2224
ポートをフォワーディングするので、
~/.ssh/config
に
RemoteForward 2224 127.0.0.1:2224
を追加。
必ず必要な作業ではありませんが、UTF-8の内容を送ると文字化けが発生する場合、転送が上手くされない場合は
同梱の.CFUserTextEncoding
を~/.CFUserTextEncoding
に設置することで回避出来ると思います。
~/.CFUserTextEncoding
を編集することで他に影響が及ぶ場合があるので、
必ずバックアップを取り、自己責任で編集お願いします。
nc(netcat)
が無いと使えないのでnc
を導入。(nc
のバージョンが古いと-C
オプションが存在しない場合があります。)
sudo yum -y install nc
同梱のrpbcopy
を~/bin/rpbcopy
などPATH
が通っている場所に設置して権限を付与
chmod a+x ~/bin/rpbcopy
リモートサーバにsshログイン。 手元Macのクリップボードに送りたいファイルやコマンドの出力を、リモートサーバ上で
# 転送が出来るかテスト
echo "hello" | rpbcopy
# 日本語が転送が出来るかテスト。駄目な場合はMac側の `~/.CFUserTextEncoding`を設定する必要あり
echo "こんにちは" | rpbcopy
# fileの中身を手元Macのクリップボードにコピー
cat fileneme | rpbcopy
# リモートサーバのhistoryの内容を手元Macのクリップボードにコピー
history | rpbcopy
という感じでrpbcopyに渡すと、手元のMacのクリップボードに渡されるので
Mac側でpbpaste
や貼り付けが出来る。
~/.bash_profile
や~/.zsh_profile
などに
alias pbcopy='~/bin/rpbcopy'
とaliasを追加して、pbcopy
でも使えるようにしておけば、
リモートサーバとローカルサーバを意識せずに利用出来る。
導入の際にハマったところをまとめておく。
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を利用することで回避出来る模様。
nc -vz 127.0.0.1 2224
Macのncの場合オプションは-c
なので注意
echo "hello" | nc -c 127.0.0.1 2224
pbpaste
Macのncの場合オプションは-c
なので注意.
echo "日本語のテスト" | nc -c 127.0.0.1 2224
pbpaste
駄目な場合は、~/.CFUserTextEncoding
を同梱のものに入れ替えるてどうか確認。
type nc
nc -vz 127.0.0.1 2224
echo "hello" | nc -c 127.0.0.1 2224
mac側でpbpaste
を実行してみてどうか