ssh-copy-id shell script

たまにssh-copy-idコマンドについて書いてある記事を読みますが、中身は特に難しい事もしていないシェルスクリプトだったりします。
RHEL4/CentOS4のopensshパッケージには入ってないのでcvsから持ってきます。

cvs -d anoncvs@anoncvs.mindrot.org:/cvs co openssh/contrib
cd openssh/contrib
less ssh-copy-id

ざっと眺めると、中身は以下のような流れになっています。

  • 転送するSSH公開鍵の選択
    • -iオプションがあれば指定されがファイルを使う事にする。ただし .pub が付いていなければ付け足す。
    • SSH_AUTH_SOCK 環境変数があれば ssh-agent 下なので、ssh-add -L コマンドで取得する事にする。
  • 転送先サーバに ssh し、以下のコマンドによりパイプを経由して公開鍵を流し込む。

umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys

    • umask 077を設定する。
    • .sshディレクトリがなければ作成する。
    • 標準入力から .ssh/authorized_keys に追記する。
  • 転送終わったよメッセージを表示する。

というわけで ssh-copy-id が無い環境の人は、上のやり方でssh-copy-idを持ってきても良いし、相手先 authorized_key に標準入力から追記するフレーズを覚えても良いかなと思います。なお、いくつかcvsweb系で公開状態になっているものもありますね。とりあえず中を見るだけならこれが手っ取り早いでしょう。