FreeBSD QandA 2255

FreeBSD QandA

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


間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。