2011年4月17日日曜日

各種コマンドの ssh オプションの指定

私の管理するサーバの ssh 接続はキーペア認証のみ許可し、また念のためにポート番号を22以外に変更しています。外部からは smtp や http 以外は全て ssh 経由のみで接続していますが、コマンドによって ssh のオプション指定が異なり、いつも man 等を調べ直していますのでまとめました。

rsync -e ssh のオプション

ダブルクォートを使用して、-e ssh のオプションを指定します。下記の例でははポートを9999に変更し、また秘密鍵を ~/.ssh 配下以外の秘密鍵を指定 *1 しています。

$ rsync -av -e "ssh -p 9999 -i /path/to/private/key/id_rsa" \
   username@host:source destination

scp の ssh オプション

scp では -i で秘密鍵、-P でポートを指定します (-p は cp コマンドと同様に、ファイル属性の保持です)。下記の例でははポートを9999に変更し、また秘密鍵を ~/.ssh 配下以外の秘密鍵を指定しています。

$ scp -pr -P 9999 -i /path/to/private/key/id_rsa \
   username@host:source destination

また、-o で ssh のオプションを指定することも可能です。上記と同様の内容を -o で指定する場合、以下となります。

$ scp -pr -o Port=9999 -o IdentityFile=/path/to/private/key/id_rsa \
   username@host:source destination

FUSE sshfs の ssh オプション

sshfs では、scp と同様に -o で ssh オプションを指定します。下記の例でははポートを9999に変更し、また秘密鍵を ~/.ssh 配下以外の秘密鍵を指定しています。

$ scp -pr -o Port=9999 -o IdentityFile=/path/to/private/key/id_rsa \
   username@host:/directory mountpoint

Mercurial の ssh オプション

(2012/05/05 追記)

Mercurial では、-e で ssh コマンドを指定します。下記の例でははポートを9999に変更し、秘密鍵を ~/.ssh 配下以外の秘密鍵を指定しています。また、リモートリポジトリの指定はURI形式 *2 を使用します。

$ hg clone -e "ssh -p 9999 -l username -i /path/to/private/key/id_rsa" \
   ssh://host//absolute/path/to/repository

*1 特に laptop 機では、秘密鍵などの重要なファイルは TrueCrypt の暗号化ボリューム内に置いているためです。

*2 URI は "スキーム名://ホスト名/パス" なので、リモートリポジトリへのパス指定に絶対パスを使用した場合は上記の例のように (ホスト名とパスの間の "/" は2つに) になります。当然ながらログインディレクトリからの相対パスで指定する場合 *3 は ssh://host/relative/path/to/repository です。

*3 通常は絶対パスで指定すると思いますが、ホームディレクトリ配下にリポジトリを置いている場合など、こちらの方が便利なケースもあります。

2011年3月1日火曜日

GNU Screen の設定

一年ほど前に emobile の Pocket-WiFi を導入して以来、GNU Screen (以下screen) は必須*1です。当初はエスケープキーを変更する程度だったのですが、便利な設定を公開している方のサイトを読んではその機能に驚き、拾わせていただいてます。以下、現在の設定メモです。

.screenrc

デフォルトのエスケープキー "ctrl-a" は bash/emacs とバッティングするので、"ctrl-z" に変更します

escape ^Zz

デフォルトで UTF-8 を使用します

defencoding UTF-8
encoding UTF-8 UTF-8

画面下部にスクリーン名とロードアベレージを表示します

hardstatus alwayslastline "%{= Gk} %-Lw%40L>%{b kg} %n %t %{-}%+Lw%-020=%{b km} %l"

よく使用するエンコーディングを切り替えます

bind "u" encoding UTF-8
bind "e" encoding eucJP
bind "s" encoding SJIS

emacsライクなスクリーンの分割です

bind "2" split
bind "o" focus
bind "1" only
bind "0" remove

スクリーンのリサイズ関係です

bind "=" resize =
bind "_" resize max
bind "r" eval 'echo "Resize window"' 'command -c resize'
bind -c resize ^]  command
bind -c resize j eval 'resize +1' 'command -c resize'
bind -c resize k eval 'resize -1' 'command -c resize'

screen を exit した後、Esc キーを押下するまで screen を終了しません(最後の実行結果の表示が残ります)

zombie ^[

manページについて

screen は非常に多機能である上、man ページが非常に充実していて読み応えがあります。そして、最後の2行がステキです。(括弧内は日本語manページの翻訳)

A weird imagination is most useful to gain full advantage of all the features.
(全機能を最大限に生かすためには、おかしな想像力が非常に有用となる。)

Send bug‐reports, fixes, enhancements, t‐shirts, money, beer & pizza to screen@uni-erlangen.de.
(バグ報告、修正、改良、Tシャツ、お金、ビール、ピザ等 は screen@uni-erlangen.de まで送ってほしい。)


*1 emobileは6時間ごとに接続を切ってipアドレスを振り直します。以前はサイトFAQに「サービス仕様」と明記されていた記憶があるのですが、今は探しても見つかりません。この辺りの仕様をご存知の方、ご教示いただければ幸いです。

2011年2月27日日曜日

Mercurial:MacOSXでGUIのdiff/mergeツールを使用する

MacOSX の開発環境 "XCode" には GUI の diff/merge ツールである FileMerge が含まれています。これを Mercurial の外部ツールとして使用するよう設定してみました。

コマンドラインからの FileMerge の起動指定

コマンドラインから FileMerge を起動するには opendiff というコマンドを使用します。.hgrc に、  

[extensions]
hgext.extdiff =

[extdiff]
cmd.opendiff =

と指定することで opendiff というサブコマンドが使用できるようになるので、それを指定すると

$ hg opendiff
FileMerge が起動します。

FileMergeで日本語を使用する

FileMerge は日本語の対応に問題があり UTF-8 等の文字コードを使用した場合に文字化けしてしまいますが、環境設定でフィルタを指定して変換することで正しく表示することが可能です。標準でインストールされている /usr/bin/iconv は文字コードの指定が必要で使いにくいため、ここでは自動で判定/変換してくれる nkf を MacPorts でインストールして使用しました。

$ sudo port install nkf
環境設定でフィルタに nkf を指定します。FileMerge は Shift-JIS は文字化けせずに表示できるので出力指定を -s とします。 これで FileMerge で日本語を使用できるようになりました。

2009年11月25日水曜日

vsftpd設定メモ

いつも設定がわからなくなるので、メモっておきます。

umaskの設定

groupに書き込み権限を与える場合

file_open_mode=0666
local_umask=002

chrootの設定

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
/etc/vsftpd.chroot_list に、chroot しない ユーザを列挙する

2009年11月8日日曜日

Trac:ポップアップカレンダーで日付を入力

TracDecoratorPluginでポップアップカレンダー入力

TracDecoratorPluginを使用することで、ポップアップカレンダーからの入力ができるようになります。

TracDecoratorPlugin のインストール

インストールはプロジェクトページのインストール方法どおりでOKです。ここでは trac0.11.5ja を使用していますので、trunk を取得します。インストール後に httpd を再起動すると、プラグインが有効になります。

$ svn co http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/decoratorplugin/trunk
$ cd trunk/
$ python setup.py bdist_egg
# cp dist/TracDecoratorPlugin-0.3.1-py2.4.egg /home/trac/test/plugins/
# /usr/local/apache2/bin/apachectl restart
0.11系ではデフォルトで TracGanttCalenderPlugin の開始日/終了日(due_assign, due_close)のポップアップカレンダー入力が有効になりますので、設定は不要です。それ以外のカスタムフィールドに使用するには、以下の書式で trac.ini に指定します。

[decorator]
calendar_fields=due_assign,due_close