@kyanny's blog

My thoughts, my life. Views/opinions are my own.

ssh でリモートコマンドを実行するとき、ローカルでリモートのコマンド終了を待ちたくないときは -f オプションをつける

最後の追記

コメント欄 http://d.hatena.ne.jp/a666666/20090121/1232531071#c で kdaiba さんに超わかりやすい解説をしていただきました。そしてその解説をふまえて yappo さんのツッコミを読み直すと、 192.0.2.0 はやっぱり適切な例ではなかった。ありがとうございました。とても勉強になりました。マエストロの説明も自分がわざわざおかしな風に解釈してしまったんだな・・・。

$ ssh 192.0.2.1 'sleep 3; echo done.'
# 3 秒待って done. と出力してからシェルに戻り入力待ちになる
$ ssh -f 192.0.2.1 'sleep 3; echo done.'
# すぐにシェルに戻って入力待ちになり 3 秒後に done. と出力する

例として使える IPv4 アドレスは RFC3330 に載っている。

Special-Use IPv4 Addresses
特別に使用するIPv4アドレス
RFC3330 特別に使用するIPv4アドレス

追記

192.0.2.0 は適切でない(192.0.2.1 などとすべき)とはてなブックマークでコメントをいただいたので、修正しました。でも、何故適切でないんだろう?末尾が .0 で終わる IP アドレスは存在しない、または使ってはいけない、と決まってるのかな。

さらに追記

もしかしてこれだろうか

* ホスト部の2進数表現が全て0(例:192.168.170.0/24)

ネットワーク自体を指すアドレスとして用いられる。本来これはネットワーク構成図やサーバソフトウェアの設定などにおける表記上の約束事にすぎず実際には必ずしも使えないわけではないが、動作が保証されないので避けたほうがよい。また過去においては、ブロードキャストアドレスとしてこの形式を用いるOSも存在した。

http://ja.wikipedia.org/wiki/IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9

/24 ついてなくても、 .0 で終わるものはネットワークじたいを表すアドレスを意味するのかな。いわれてみれば .0 で終わるアドレスをもってる機器は見たことがない気がする。

さらにさらに追記

マエストロに聞いたところ、 .0 で終わるアドレスはブロードキャストなので ping うってみるといいよと言われたので試してみたら、 .0 で終わるアドレスに ping すると末尾が 0 以外のいろんなアドレスに対して ping を打ちまくる。なるほど。基本だそうです。勉強になりました。