• ベストアンサー

sshの公開鍵認証の基本的な仕組みについて

ネットワークセキュリティの初心者です。教えてください。 sshの認証を使用して、サーバのファイルをクライアントにコピーしようとしています。 こちらで行った手順は以下のとおりです。(クラサバ共にSolaris) クライアントにて:  ・ssh-keygen -t rsa で秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を作成。  ・scp id_rsa.pub hoge@192.168.10.10:/tmp でサーバに転送  (パスワードを入力すれば転送できた) サーバにて  ・cat /tmp/id_rsa.pub >> ~/.ssh/authorizedkeys で設定 上記にて、クライアントから scp testfile hoge@192.168.10.10:/tmpをしたところ、パスワード入力なしで無事転送することができました。 ここまではOKなのですが(前置き長くてすみません) この状態で、クライアントにて再度 ssh-keygenを実行してしまうと、またサーバのauthorizedkeysを設定しなおさなければならないのでしょうか? また、クライアントでのssh-keygen実行時に、id_rsa以外の名前で鍵を作成したときはどうなのでしょうか?(やはりサーバでの設定が必要?) そもそも鍵を作成する仕組みや鍵を管理している仕組みがわかっていれば簡単な問題かもしれませんが、どなたか教えてください。 こちらでは安易にテストする環境がないため、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 公開鍵認証方式で行うssh通信では、ssh-keygen(KEY GENerator 鍵生成コマンド)で作成した2個一組の公開鍵・秘密鍵ペアを用います。そして、一方で暗号化するともう一方でしか復号(元に戻すこと)できないような仕組みになっています。よって、一方の鍵が紛失・変更されると、もう一方の鍵は役立たずになります。参考URLに通信方法が詳しく書かれていますので御覧になってみて下さい。 > また、クライアントでのssh-keygen実行時に、id_rsa以外の名前で鍵を作成したときはどうなのでしょうか? どんな名前でも構わないと思います。秘密鍵ファイル名を既定以外のものにした場合は、プログラムのオプションで指定したり(例:scp -i 秘密鍵ファイル、sftp -oIdentityFile=秘密鍵ファイル、等々)、ユーザ設定ファイルを書き直す必要があるかもしれません。 > id_rsa, id_rsa.pubは単なるファイルですか。。。 cat id_rsa.pubなどとして、中身のデータを見てみて下さい。「鍵」として使う文字列・数列が見えると思います。id_rsa.pubの中身(=公開鍵)はauthorized_keys(公開鍵リストのファイル)に最終的に追加登録することで利用できるようになります。よって、一時的に作成するid_rsa.pubというファイル(鍵の入れ物)は追加登録の後は必要なく、捨てても構いません。必要なのは中身の鍵文字列ですから。 (Wr5さんのおっしゃっていることを言い直しているつもりです) > ちなみに、ネットで調べた限り「公開鍵は消しておいたほうが安全」と書いてあるサイトがあり、 「authorized_keysに追加登録後、必要なくなったid_rsa.pubがユーザ本人の知らないところに漏洩しないように」ぐらいの意味だと思いますが。私が捜した限りでは、以下のような感じで削除を勧める文章は多くありましたが、「消しておいたほうが安全」とまで書かれたページは見つけられませんでした。 http://www.nabe.bne.jp/linux/ssh.html > id_rsaをchmodで0600にしておきなさいというのも「作り直し防止」の一環なんでしょうかね? 秘密(にすべき)鍵であるid_rsaを、本人のみが読出し・変更・削除可能、他人は読むことも変更・削除することも不可という状態(600)に設定(CHange MODe)します。こうしないと、別のユーザが貴方の秘密鍵をコピーし、貴方になりすましてsshサーバにログインすることが可能になります。ユーザ本人は鍵を作りなおすことはあるでしょうから、「(本人の)作り直し防止」が必要とは思いません。

参考URL:
http://webos-goodies.jp/archives/50665333.html

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

当方、Linuxですが…… >この状態で、クライアントにて再度 ssh-keygenを実行してしまうと、またサーバのauthorizedkeysを設定しなおさなければならないのでしょうか? そういうコトになると思います。 が公開鍵を使い捨てにする必要は無いと思いますが、違いますか? >また、クライアントでのssh-keygen実行時に、id_rsa以外の名前で鍵を作成したときはどうなのでしょうか?(やはりサーバでの設定が必要?) あくまでも出力する「ファイル名」の指定でしかないので、作成された公開鍵を登録しないと使えない点は変わらないかと。

nanachin77
質問者

お礼

ありがとうございます。 id_rsa, id_rsa.pubは単なるファイルですか。。。 てっきり上記の2ファイルをバックアップして、テスト用に別のファイル名でssh-keygenをしたあとで、 2ファイルを戻せば、サーバに気づかれずにテストできるのかな? と思ってましたが、甘かったようですね。質問しておいてよかったです。 ちなみに、ネットで調べた限り「公開鍵は消しておいたほうが安全」と書いてあるサイトがあり、消したあとでほかのサーバに公開鍵を渡したいときにはどうするんだろう・・・という点も不思議でした。 id_rsaをchmodで0600にしておきなさいというのも「作り直し防止」の一環なんでしょうかね? 引き続きわかるかた、ご意見をお願いします。 m(_ _)m

関連するQ&A

  • SSHの公開鍵について

    お世話になっております。 現在3台のサーバA,B,Cがあり、AのサーバからB,Cにパスワードなしでログインできるようにするため、 AのサーバでSSHの公開鍵と秘密鍵を作成しました。(パスフレーズはnull) 具体的な手順は以下になります。 ------------------------------------------------------------------------------------------- 1. Aサーバにて公開鍵と秘密鍵を作成 A # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (//.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in //.ssh/id_rsa. Your public key has been saved in //.ssh/id_rsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@A 2. 秘密鍵、公開鍵が作成されていることを確認 A # ls ~/.ssh id_rsa id_rsa.pub known_hosts 3. 公開鍵をBとCサーバへ配信 A # scp ~/.ssh/id_rsa.pub root@B:/tmp Password: id_rsa.pub 100% |***************************************| 223 00:00 4. BとCサーバ側で公開鍵の登録 B # cat /tmp/id_rsa.pub > ~/.ssh/authorized_keys ------------------------------------------------------------------------------------------- 登録後、AサーバからB,CサーバにSSHで接続してみたのですが、一見パスワードなしでログインできているようでした。 ただ、何故か B,Cサーバや無関係なDサーバからもAサーバへパスワードなしでアクセスできてしまいます。 公開鍵を登録したのはB,Cサーバのみで、B,CサーバからAサーバに対してパスワードなしでアクセスできないはずという認識です。 更に、数日後AサーバからB,Cサーバに接続を試みたところ、以下のメッセージが出力されました。 ------------------------------------------------------------------------------------------- ホスト 'B (1.1.1.1)' の認証を確立できません. RSA 鍵フィンガープリントは xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx です 本当に接続を継続してもよろしいですか (yes/no)? ------------------------------------------------------------------------------------------- 公開鍵はBサーバ初回接続時にknown_hostsへ登録済みで、Bサーバ側のIPアドレスの変更なども実施していません。 SSHの仕様で、公開鍵が数日で変更されるのでしょうか? 上記について、アドバイスや問題点があればご教示いただければ幸いです。

  • ssh の仕組み

    ssh の仕組みについて、よくわからない事があるので、よろしくお願いします。 (サーバの設定) ・/etc/ssh/sshd_config ファイルの編集をして、ルート権限ログインできないようにする。 ・デーモンを起動する。 (クライアントの設定) 1#ssh-keygen -t rsa 2#mv id_rsa.pub authorized_keys2 3#ssh hoge@192.168.x.x 4#rsa を入力 5#known_hostに関してのプロンプトに、yesで答える 6#パスワードを入力 上記の手順を踏んだとき、 まず、 (質問1:) 4のrsaを入力というのは、 相手側に自分の公開鍵を渡すと言う事でいいのでしょうか?? (質問2) これで、ログインした場合、サーバはその公開鍵を使って、暗号化→クライアントはそれを自分の秘密鍵(id_rsa)により、復号化。という解釈でいいのでしょうか? (質問3) 質問2の場合、クライアントから、サーバに送信するメッセージは暗号化されていないのでしょうか? (質問4) /etc/ssh/sshd_configの設定で、RSAAuthorized no にしてしまったら、 暗号化されないで、平分で、データが流れてしまうのでしょうか? (質問5) 結局のところ、SSHというものは、ユーザのパスワードを知っていたら、簡単に侵入ができるようなものなのでしょうか? (質問6) 上記の手順自体が全く間違っているのでしょうか? (質問7) ~/.ssh/known_hosts の中に入っているデータはいったいなんなんでしょうか??(相手の公開鍵??) /* 長くなりましたが、答えれる部分でいいので、よろしければお答えいただけないでしょうか。どうか、よろしくお願いします。

  • SSHでの公開鍵認証接続時のログイン画面

    CentOSクライアントからのCentOSサーバへ公開鍵認証によるSSH接続をしたいと思っています。公開鍵認証なのでパスワードではなくパスフレーズでの認証ができるようにしたいです。 しかし、設定操作を一通りやってクライアントからサーバへログインしようとすると添付画像のとおり「パスワード」と書かれたログイン画面が出てきます。 一応パスフレーズとして設定した文字列を入力しないとログインできないようにはなってるのですが、これはちゃんと公開鍵認証ができるようになっているのでしょうか。また、ログイン時に入力した文字列はパスワードではなくパスフレーズとして登録されているのでしょうか。 以下、環境/前提条件および操作手順の詳細です。 ■環境/前提条件 ・OSは両方ともCentOS6.5 ・OpenSSHのバージョンは両方とも5.3 ・仮にサーバ側のホスト名をtestserver、その中にあるユーザー名をtest1とする ■操作手順 (1)クライアント側でssh-keygenでid_rsaとid_rsa.pubをローカルに作成し、パスフレーズを登録。 (2)サーバ側で  .ssh/authorized_keysを作成し、   chmod 700 .ssh  chmod 600 .ssh/authorized_keys  を実行 (3)クライアント側で以下のコマンドを打ち公開鍵ファイルをサーバへ転送  cat .ssh/id_rsa.pub |ssh test1@testserver 'cat >>  .ssh/authorized_keys' (4)両マシーン共再起動させた後、クライアントからサーバへ   ssh test1@testserver  でログインしようとしたら添付画像が出てきた。 パスワード欄にはtest1@testserverのパスワードではなく、(1)で登録したパスフレーズを入力しないとログインできないようになっているが、 このログイン画面に書かれてるのがパスフレーズではなくパスワードとなっているのが気がかりです(パスフレーズとして認識されていない?) これはちゃんと公開鍵認証ができるようになっているのでしょうか。また、ログイン時に入力した文字列はパスワードではなくパスフレーズとして登録されているのでしょうか。 目標が達成できていなければ、問題点および解決策を教えてくださいますようお願いします。

  • SSH通信で秘密鍵の読み込みが失敗

    ●質問の主旨 クライアントコンピューターとサーバー間で SSH通信を行いたいと考えています。 公開鍵暗号方式でSSHサーバーに対して、 クライアントコンピュータからリモート接続を行おうとして クライアントのTeraTermを使って秘密鍵でアクセスしようとしたところ、 「SSH2秘密鍵の読み込みに失敗しました」という添付画像のような メッセージが出ます。 このメッセージ出されることなく、クライアント~サーバー間で SSH通信を行うためには、どこをチェックすればよいでしょうか? ご存知の方がいらっしゃいましたら、ご教示願います。 ●質問の補足 現在の状況は以下の通りです。 1.クライアントのTeraTermで秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を作成 2.秘密鍵(id_rsa)はクライアントのCドライブのRSAという任意の名前のフォルダに保存 3. 公開鍵(id_rsa.pub)はSFTPでサーバーの一般ユーザのホームディレクトリに転送 4. 一般ユーザのホームディレクトリ配下に/.ssh/authorized_keysディレクトリを追加 (cat id_rsa.pub > /home/user/.ssh/authorized_keys) 5.chmodコマンドで.ssh及び.ssh/authorized_keysのアクセス権を変更 6.cat authorized_keysで中身を見ると、 公開鍵(id_rsa.pub)の文字の羅列が並んでいる ●環境 上記で言う、クライアントコンピュータはWindows8を使用しています SSHサーバーは、CentOS6.0をディストリビューションとするLinuxを使用しています

  • 玄箱debian化したものでsshで秘密鍵を認識しない

    こんにちは、santa51@愛知です 玄箱proをdebian化して サーバーを作っている初心者です。 sshに取りかかっているのですが、 上手くいきません。 $ssh-keygen -t rsa で鍵を適切に作成して $cd .ssh $cp id_rsa.pub authorized_keys $chmod 600 authorized_keys とし、 id_rsaをwindows側に持ってきて tera term4.6で 適切に入力項目を設定して 秘密鍵をさっき持ってきたものを 設定してokを押すと 「認証に失敗しました。再試行してください」 と蹴られます。 手順については、hpを参考にして 行いました。 どなたか、教えていただけませんでしょうか?

  • sshでパスワードなしにする方法(サーバ)

    リモートのコンピュータ(windows2003server)にクライアント(HU-UX)からsshを利用して自動実行したいのですが、どうしてもパスワードを聞かれてしまいます。 クライアント側 # ssh -v OpenSSH_3.7, SSH protocols 1.5/2.0, OpenSSL 0.9.7c 30 Sep 2003 サーバ側 C:\Documents and Settings\Administrator>ssh -v OpenSSH_3.8.1p1, OpenSSL 0.9.7d 17 Mar 2004 手順は クライアント側 # ssh-keygen -t rsa1 下記が作成される 秘密鍵: ~/.ssh/id_dsa 公開鍵: ~/.ssh/id_dsa.pub id_dsa.pubをリモート側の~/.sshに転送する。 リモート側 id_dsa.pubをauthorized_keysに追加する。 以上です。

  • SSHの設定

    こんばんは。 ServerA ClientB 上記2台のマシンにSSH通信を設定したいと思います。 両方ともOSはRedhat EnerPrise Linux4です。 ClientBの作業: # ssh-keygen -t rsa # scp ~/.ssh/id_rsa.pub root@ServerA ⇒公開鍵をServerAにコピー ServerAの作業: # cd .ssh # touch authorized_key # chmod 600 authorized_keys # cat ~/id_rsa.pub >> authorized_keys 上記はrootユーザですが、仮に「oracle」など別のOSユーザで通信を する場合、ClientBとServerAの両方にOSユーザとして、 「oracle」を作成しておく必要はあるのでしょうか?。 アドバイスお願いします。

  • sshの鍵方式ログイン

    sshで【ssh-keygen -t rsa】で鍵を作成し、pubキーをログイン先のサーバーへ配置しました。この方式でrootでは難なくログインできるのですが、一般ユーザーだと【Permission denied (publickey,gssapi-with-mic).】のようにエラーが出てログインできません。なぜでしょうか? ご存知の方、宜しくお願いします。

  • SSHのパスワード無し認証(公開鍵暗号方式)

    過去ログに似た質問がいくつかあり、それらを参考にしましたが、何故か私の環境では上手く行かないので、何が原因なのか、どうすればよいのか、どなたか教えて頂けると嬉しく思います。 ■やりたいこと ・SSHでパスワード無しログイン ■環境条件 ・ローカルマシン(接続元)   VineLinux 3.1 ・ホストマシン(接続先)   VineLinux 3.1 ・両方のマシンに同じユーザ(hikaly)があり、ログインパスワードは同じものになっている。 ■手順 ローカルマシンにhikalyでログインし、 $ ssh-keygen -t rsa -N "" でパスフレーズ無しの鍵を作成する。 /home/hikaly/.ssh/id_rsa.pub というファイルを、ホストの /home/hikaly/.ssh/ にコピー。この際、WinSCP3を使って、ローカル→作業用Windowsマシン→ホスト とコピーを行いました。 ホストの /home/hikaly/.ssh/ には authorized_keys が存在しなかったので、コピーした rsa_id.pub を authorized_keys に改名。 ホスト側で root になって sshd_config を編集。 RSAAuthenticationを「yes」にして保存。sshdを再起動させました。 ■結果 これでローカル側からホスト側にパスワード無しで接続できるはずだと思いますが、 hikaly@hostmachine's password: とパスワードを尋ねられてしまいます。 いろいろとググッて調べてみたところ、「接続先(ホスト側)でssh-keygenしてできたrsa_id.pubを接続元(ローカル側)にコピーせよ。」と読める資料を見つけましたが、多くのものは「接続元でssh-keygenして接続先にコピーせよ。」と書かれています。ワケ分からなくなってきました。(;´ρ`) 私の質問もややこしくてワケ分からなくてすいません。

  • DSA認証でパスワードを聞かれてしまう・・

    ssh の公開鍵認証がうまく行きません。 つぎのようにやりました。 #ssh-keygen -t dsa #scp /home/hoge/.ssh/id_dsa.pub hoge@remotehost:/home/hoge/ #ssh hoge@remotehost hoge@remotehost's password:  ←パスフレーズを入力します #cat id_dsa.pub >> /home/hoge/.ssh/authorized_keys このあと、 ●.ssh のモードを 700 ●authorized_keys のモードを 600 に設定します。 こうすると、次のログインでは、 だいたいのホストでは、パスフレーズ入力だけになって、 パスワードは聞かれません。 しかし、ホストによっては、 パスフレーズ入力+パスワード入力が必要になります。 なぜでしょうか? うまく行っていないホストは redhat です。