Q. cron 等から起動されるバッチ処理の中で ssh を利用したいのですが、
ログインを自動化するにはどうすればよいですか?
A. 二つの方法があります。
一つは、ホストベース認証を使う方法です。詳しい設定方法は
[管理番号 1578] で紹介されていますので、そちらを参照して下さい。
もう一つは、パスフレーズの設定されていない秘密鍵を使う方法です。
[管理番号 1578] では、公開鍵認証で ssh-agent を使う方法を紹介していますが、
これは ssh-agent をあらかじめ起動しておく必要があるため、cron 等からの
利用には向いていません。
もちろん、秘密鍵ファイルにパスフレーズを設定しないということは
パスワードを生でテキストファイルに保存しているのと同義ですから、
より厳重に鍵ファイルを管理しなければなりません。
そこで、万が一秘密鍵ファイルを盗まれた場合のリスクを軽減するため、
利用制限付きの認証鍵を作成する方法を紹介します。
以下の手順は、OpenSSH 2.9 と 3.4p1 で実行できることを確認しています。
1. パスフレーズのない認証鍵を新しく作成します。
% ssh-keygen -t rsa1 -N "" -f ~/.ssh/backup
SSH2 を使う場合は '-t rsa1' を '-t dsa' や '-t rsa' に変えて下さい。
2. 作成された公開鍵ファイル ~/.ssh/backup.pub の先頭に「オプション」を
追加します。
% vi ~/.ssh/backup.pub
...
% cat ~/.ssh/backup.pub
command="/usr/bin/tar czf - hoge",no-pty,no-port-forwarding 1024 35 1472731(以下略)
この例では、"/usr/bin/tar czf - hoge" というコマンドだけが実行可能な
ように指定しています。オプションには他にも多くの種類があります。
詳しくは sshd(8) を参照して下さい。
3. 編集した公開鍵ファイルをリモートホストへ転送します。
% cat ~/.ssh/backup.pub | ssh remotehost 'cat >> .ssh/authorized_keys'
これで、準備は完了です。
% ssh -q -i ~/.ssh/backup remotehost > backup.tgz
とすると、リモートホストでの "/usr/bin/tar czf - hoge" の出力が
ローカルホストの backup.tgz に格納されます。
また、万が一 ~/.ssh/backup の内容が洩れたとしても、
この鍵では "/usr/bin/tar czf - hoge" というコマンドしか実行できないので
被害を最小限に押えることができます。
なお、/etc/ssh/sshd_config に以下のように記述しておくと、
通常の root ログインを禁止しながら、command オプションを指定した
公開鍵認証のみを許可することができます。
-----------
PermitRootLogin forced-commands-only
-----------
この機能はリモートバックアップ等を実行する場合に非常に便利です。
グループ名: ssh