ssh サーバに公開鍵をワンライナーで登録する方法

2014.05.09 追記

$ ssh-copy-id user@hostname

でいいかも。
(公開鍵ファイルを指定したい場合は -i オプションを使用する)





$ ssh user@hostname "echo `cat ~/.ssh/id_rsa.pub` >> ~/.ssh/authorized_keys"

以上。
たまにやりたくなるんだけどいつも忘れるのでメモ。

`〜` はローカル側のシェルで置き換えられてから ssh コマンドが実行され、echo 〜 はリモートサーバ上で実行される。

ちなみに bash の man の EXPANSION の項によると、

  1. ワード分割
  2. ブレース展開(a{b, c, d}e を abe, ace, ade に分割)
  3. チルダ展開(~ をホームディレクトリなどに展開)
  4. 以下の展開が同時に行われる(左から右の順で評価される)
    1. パラメータ、変数および算術展開(${〜} や $((〜)) を展開)
    2. プロセス置換(<(〜) や >(〜) を置換。名前付きパイプ(FIFO)をサポートしている環境のみ)
    3. コマンド置換($(〜) や `〜` を置換)
  5. ワード分割(ここまでの展開で生成されたワードに基づいて再度分割)
  6. パス名展開(* や ? や [〜] を展開)

の順で処理されてから実行されるようです。