UNIXのお話です。分からない人はスルー推奨。
ようやく特定できそうにない、オープンなネタがきました(笑)
検証機として使ってるUNIXサーバ2台を使って、ツールのテストをやってたんですが、
sshでの接続にパスの入力を求められちゃう。
単にログインするだけならいいんですけど、scpとかsshを使ってリモートでコマンド実行するときに
いちいちパスを聞かれるのは( ゚Д゚)マンドクセー
まして、ツール内でssh使うのならなおのこと。cronに登録して、自動実行されるツールだしね。
なので、検証機のsshをパス無しで接続できるように設定しようとしました。
sshなんてLinuxでも使われてるし、ググれば情報はたくさん出てきます。
昔、この設定やったような気がするんだけど、もう忘れちゃったい!
まずは接続先サーバにて公開鍵の作成。
$ ssh-keygen -t rsa ←RSA暗号方式の鍵を作成
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nori/.ssh/id_rsa): ←[Enter]キー
Enter passphrase (empty for no passphrase): ←パスフレーズを入力
Enter same passphrase again: ←同じパスフレーズを入力
Your identification has been saved in /home/nori/.ssh/id_rsa.
Your public key has been saved in /home/nori/.ssh/id_rsa.pub.
The key fingerprint is:
f9:81:b6:c7:8f:b9:aa:3e:0e:c6:bd:35:19:a1:1e:06 nori@pandora
ホスト名は適当です。
ここでパスフレーズ入力のところを空にしとけばパスワードなしになる。
で、${HOME}/.ssh/以下に秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されてます。
公開鍵(id_rsa.pub)の方を接続元のサーバにコピーし、同じく
${HOME}/.ssh/以下のauthorized_keysに追記(無い場合は新規作成)してやると。
過去に一度でもsshで接続したことがあるのなら、${HOME}/.ssh/以下にknown_hostsと
いうファイルが存在しているので、接続先ホスト名のエントリを削除してあげる。
そうすることで、新たに用意した公開鍵を使って認証してくれる…と思ってました。
このやり方やっても、な~んも変わりませんでした(笑)
いくらやってもダメなので、もう面倒になって試験方法を変えてやっちゃいましたが
どうも根本から間違ってたようです(;^_^A アセアセ・・・
sshで認証時にパス無しにするためには、「ssh-agent」を使うんですって。何ソレ?
良くわかりませんが、公開鍵(ida_rsa.pub)は接続先サーバのauthorized_keysに登録するらしいです。
で、秘密鍵(ida_rsa)の方を接続元サーバにコピーし、ssh-addコマンドで登録するようです。
実際は、ssh-agentが起動していないとダメなようなので、
$ eval `ssh-agent`
Agent pid 1084
$ ssh-add /mnt/floppy/id_rsa ←ssh-agentに秘密鍵を登録
Enter passphrase for /mnt/floppy/id_rsa: ←パスフレーズを入力
Identity added: /mnt/floppy/id_rsa (/mnt/floppy/id_rsa)
となるようです。
参考:@IT「sshでパスワードなしにログインするには」
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/447nonpassh.html
最初のやり方と全然違うじゃないかorz
だいたい、最初のやり方だと作成した秘密鍵って使ってないようにも見えるよね。
でも、このサイト見てやったんだけどなぁ。
参考:「OpenSShを使って、パスワードなしのログイン」
http://www.geocities.jp/turtle_wide/tools/sshpass.html
どっちが正しいんだ??
どっちかが間違ってるのか、どっちも正しいのか…。
RSAとDSAの違いかと思ったけど、「OpenSSHを…」のサイトでは
設定方法どっちも同じように見えるけどなぁ。
とりあえず最初のやり方でダメだったんだから
今度、@ITのやり方試してみよう。