Windows 上で作成・更新したファイルをサクッと Linux 上に反映させるのに、やっぱり Unison File Synchronizer を使うことにした。Windows 上の Unison から SSH 経由で Linux 上と同期させる構成ってしたことなかったな。ちょっと調べつつ設定。
Unison-2.40.102.zip をダウンロードしてきて C:\Uers\Naney\local\Unison-2.40.102 として展開。テキスト版(CLI 版)を使いやすいように unison.exe という名前に変える。
SSH 経由の接続については PuTTY についている Plink を使うことにした。OpenSSH とはちょっと違うので下記のようにバッチファイル C:\Uers\Naney\local\Unison-2.40.102\plinkunison.bat を作る。
@c:\Users\Naney\local\PuTTY\plink.exe -l naney -ssh remote.example.com unison -server
同期先のホスト remote.example.com にアカウント naney で SSH 接続して unison をサーバとして起動するというバッチファイル。
次に Unison 同期設定を書いたプロファイルファイル c:\Users\Naney\.unison\test.prf を作る(テスト用)。内容は以下。
root = c:\Users\Naney\unisontest root = ssh://naney@remote.example.com/home/naney/unisontest sshcmd=c:\Users\Naney\local\Unison-2.40.102\plinkunison.bat times = true fastcheck = yes
双方の unisontest ディレクトリを同期する設定になってる。
最新の OCaml (Unison のビルドに必要)と Unison を取ってくる。
wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz
あとは以前の インストール手順 と同じ流れでインストール。
Windows のコマンドプロンプトから
unison test
で同期できることを確認。
あとは実際の同期したいディレクトリのペアにあったプロファイルファイルを作っていけば OK。
現時点で最新版が2010年10月7日アップデートの 1.7.1 とちょっと古いんだけれど、過去に使った経験がある SSH クライアントの ConnectBot を使う。
まずは「接続ホスト」の設定で port forwarding するホストへの SSH 接続できるように設定する。またあわせてその接続ホストのメニューから「ポート転送の編集」を選び「ポート転送の追加」で、
を指定する。あとは ConnectBot で SSH 接続をすれば、別途 IRC クライアントアプリから 127.0.0.1 のポート番号 (A) に接続して IRC が使えるようになる。
とりあえず3つ試してみた。
この条件だと、有料だけれど Android IRC が一番良かったのでこれを使うことにする。
[ Android アプリレビュー ]
USB メモリ (USB フラッシュメモリ)とかもうずっと使ってなくて。普通に Dropbox とか Evernote とか Google ドライブとか Bitbucket とか SSH + Unison で sync とかで済んじゃうので。
昔は買うときに速度なのなんなのでいろいろじっくり選んだりしていたものだけれどねぇ。今でも PC 間のファイルのやりとりでメジャーに使われているのだろうか?
今回は某楽器用に USB メモリ用意する必要があるということらしいので、新調しようかなと思うのだけれど、その用途以外には使わなさそうだし回数もあまり使わないんじゃないかと思うので、動作確認が取れているものから普通に安めのを選んで買おうと思う。
ssh が -W オプションを使える場合:
ForwardAgent yes Host <実際に入りたいホスト名> ProxyCommand ssh <踏み台でのユーザ名>@<踏み台ホスト名> -p <踏み台 SSH ポート番号> -W %h:%p
ssh の -W オプションではなく netcat を使う場合:
ForwardAgent yes Host <実際に入りたいホスト名> ProxyCommand ssh <踏み台でのユーザ名>@<踏み台ホスト名> -p <踏み台 SSH ポート番号> nc -w 6000 %h %p
接続前に ssh-agent に秘密鍵を登録しておく。
ssh-agent bash ssh-add ~/.ssh/<private-key>
自分は keychain を使っているので .profile で
/usr/bin/keychain ~/.ssh/<private-key-1> ~/.ssh/<private-key-2> ... source ~/.keychain/${HOSTNAME}-sh
している。
ssh <実際に入りたいホスト名>
~/.ssh/config で ForwardAgent を設定していなければ、
ssh -A <実際に入りたいホスト名>
今日は Android 端末で外出先から IRC over SSH でチェックしていた。去年末にチョイスして設定した ConnectBot + Android IRC で。
でふと家に帰ったら、そういえば Debian GNU/Linux 機からの IRC over SSH する設定作っていなかったので設定しておいた。
最近 Linux BOX で直接 IRC 見ていなかったんだけれど何がいいのかな。とりあえず久しぶりに Riece いれてみたけれど最初うまくつながらなくて(設定の :coding で utf-8 とするところを utf8 としていたのが原因)、つながったらつながったで Emacs がフル回転で重くて駄目だったので別のにすることにした。 Konversation を試してみたけれど、Tiarra に接続した時に Tiarra の Log::Recent が送ってくれる過去ログをうまく処理できないみたいなので自分の場合イマイチだった。別に試してみた KVIrc では大丈夫だったのでしばらくこれを使ってみることにした。
SSH port forwarding 設定の方は ~/.ssh/config で
Host irc HostName <踏み台 SSH サーバ名> User <踏み台 SSH ユーザ名> Port <踏み台 SSH ポート番号> LocalForward 6667 <踏み台の向こうの IRC サーバ名>:6667
と書いておく。
ssh -f -N irc とすれば踏み台の向こうの IRC サーバ(あるいは Tiarra)にトンネルができるので、 127.0.0.1:6667 に KVIrc 他の IRC クライアントから接続すれば OK。
お祭り IRC チャネルを家でチェックするのに PC に張りついているのもアレだ。 Xperia GX にインストールしてある Android IRC + ConnectBot でもチェックできるのだけれどこちらはバッテリ的に常時つけておくのもアレ。ということで iPod touch 5th にも IRC クライアントを入れておいて、こちらでモニタしておこうかなと。
IRC クライアントアプリは Twitter と Facebook で LimeChat を薦められたのでこちらをチョイス。Tiarra に接続した時の送られる過去ログもきちんとさばけた。
iOS だと IRC クライアントアプリとは別に SSH アプリを実行し続けておくのが難しいようなので、iOS デバイス上で SSH port forwarding するのはやめておいて、 PC 側で SSH port forwarding をゲートウェイとして立ち上げておいてそこを経由することにした。
PC 側では以下のような設定を ~/.ssh/config に追加。GatewayPorts を yes にしておくことで port forwarding を開いた PC 以外の端末からもポートにつなげられるようになる。
Host ircgateway HostName <踏み台 SSH サーバ名> User <踏み台 SSH ユーザ名> Port <踏み台 SSH ポート番号> LocalForward 6668 <踏み台の向こうの IRC サーバ名>:6667 GatewayPorts yes
PC 上で ssh -F -N ircgateway とすれば踏み台のむこうの IRC サーバ(あるいは Tiarra)にトンネルができるので、 <PC のアドレス>:6668 に iPod touch 5th 上の LimeChat から接続すれば OK。
この間 iOS デバイス用 IRC クライアントとして LimeChat を入れたのだけれど、SSH port forwarding は別のホストに頼っていた(記事)。 でもやっぱり iOS デバイス内で SSH port forwarding もまかないたいと思い iSSH を入れてみた。
結論としては、やはり iOS マルチタスキングの制約によりバックグラウンドから10分でサスペンドになってしまい接続が切れてしまう。むむむ。まあストアで
Multitasking support - can hold connections open for up to 10 minutes
と書いてある通りではあるのだけれど。残り時間が近くなると通知でお知らせしてくれるので、再度フォアグラウンドにもってきて継続させることはできるのだけれど、手間だし、ずっと操作しているときはいいけれどその辺に置いておいてたまにウオッチするというのには向かない。あとアプリのせいではないけれど、メモリを使ような写真系アプリの起動とかしちゃうとあっさり止められちゃうのも悲しい。
あと、ポートフォワードしているローカルポートに LimeChat か接続しても「接続を試みます…」「接続しました」で止まってしまうことが多々ある。ちょっと原因不明だし不便。
SSH クライアントとしても「日本語が表示できない」「Active Connections 画面の Back ボタンが効かなくなることがある」「起動後 ssh-add までに必要なタップ数が多い」「ssh-add の後に落ちやすい」などもうちょっとお願いしますというところ。
ターミナルでの作業の内容をファイルに書き出しておきたいことがある。特に SSH で入ったリモートホスト上での作業内容を手間をかけずにローカルホスト上にもってきたいことがよくある。
tmux だと pipe-pane コマンドを使うと各ペインでの作業をパイプでコマンドに送っておけると教えてもらったので設定してみた。
cat でもいいのだけれど自分は日付別に保存したいので以下のようなシェルスクリプトを ~/.dotfiles/bin/log-tmux として作る。
#!/bin/sh DATE=`date "+%Y-%m-%d"` LOG_DIR=$HOME/var/tmux/log/$DATE LOG_FILE=$LOG_DIR/tmux-$DATE-$1.log mkdir -p $LOG_DIR tmux display-message "Started logging to $LOG_FILE" cat >> $LOG_FILE
~/.tmux.conf に以下を追加。
# # logging # # C-t C-p (toggle) bind-key C-p pipe-pane -o '$HOME/.dotfiles/bin/log-tmux "#S-#I:#W-#P"'
これで prefix*1 + C-p をタイプすると
~/var/tmux/log/2014-04-04/tmux-2014-04-0-0:bash-0.log
みたいな感じでファイルが作られてそこに pane に出力された内容が書き出されはじめる。もういちど prefix + C-p すると停止。複数のペインで同時に別のファイルにロギングしておける(それぞれで prefix + C-p をタイプして開始させておく)。
ちなみに #S とかは以下。
保存されたファイルにはエスケープシーケンスなども含まれるので見る時は less -R や lv -c あたりを使うとみやすい。
*1自分は C-t
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。