レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

C5 C6 S6

SSHコマンドで 公開鍵認証(鍵交換)を使ってSSH 接続してみる

2013年8月1日 2017年8月8日
ssh public key

以前に、TeraTermで 公開鍵認証(鍵交換)を使ってSSH 接続してみる でTeraTerm を使った公開鍵認証(鍵交換認証)を行いました。
今回は、単純に クライアント用の ssh コマンドを使っって、公開鍵認証(鍵交換認証)にてSSH接続を行ってみます。

今回も、TeraTerm 時の接続時と同じように、公開鍵認証方式による鍵ファイル+パスフレーズ(パスワード)での認証について簡単に解説してみます。

ssh コマンド で 公開鍵認証を使ってSSH 接続してみる

  1. ssh-keygen コマンドで、SSH鍵を作成します。

    SSH鍵は、ssh-keygen コマンドで作成することができます。
    SSH2に対応した、DSAとRSAの両方の鍵を作成できます。
    ここでも先のTeraTerm時と同じように 2048ビットのRSA 鍵を使ってみます。(SSH1対応のRSA1ではないので注意してください。)

    # 2048ビットのRSA鍵ファイルを作成します。
    $ ssh-keygen -t rsa -b 2048return
    Generating public/private rsa key pair.
    # ファイルの出力先、ファイル名ですが、ここではデフォルトのまま使用します。
    Enter file in which to save the key (/home/hoge/.ssh/id_rsa): return
    # パスフレーズを入力します。
    Enter passphrase (empty for no passphrase): *********return
    # 再度、パスフレーズを入力します。
    Enter same passphrase again: *********return
    Your identification has been saved in /home/hoge/.ssh/id_rsa.
    Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
    The key fingerprint is:
    5c:42:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:e1:c8 hoge@example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |      ...    ..o+|
    |       . . ...*.*|
    |        . . .....|
    |       . . .  ...|
    |        . .     .|
    |                 |
    |                 |
    |                 |
    |                 |
    +-----------------+
    

    上記の例では、/home/hoge/.ssh/ 配下に

    • 公開鍵 : id_rsa.pub
    • 秘密鍵 : id_rsa

    が作成されます。
    ssh-keygen は、デフォルトでは、ログインユーザの ホームディレクトリ/.ssh/ に各鍵ファイルが作成します。
    ssh-keygen が、クライアント側、サーバー側で実行されたかは、あまり意味がありません。
    クライアント側、サーバー側ぞれぞれに、以下のようにファイルを設置する必要があります。

    • サーバー側 : 公開鍵(パブリックキー)
    • クライアント側 : 秘密鍵(プライベートキー)
    TeraTermなどのクライアントソフトでも鍵を作成できます。
    TeraTermでの作成方法は、こちら を参照してください。

  2. 接続先SSHサーバー側に 公開鍵 を設定します。

    ssh-keygen で作成した公開鍵 を接続先SSHサーバー側にコピーします。
    設定するファイル名は、

    /ユーザホーム/.ssh/authorized_keys

    で作成します。
    ここでは、hoge という名前のユーザで解説してみます。

    /home/hoge/.ssh/authorized_keys

    ssh-rsa AA........PQ== hoge@example.com

    公開鍵は、単純なテキストファイルなのでコピー&ペーストでファイルを作成してもOKです。また、SFTPなどでアップロードしてもOKです。
    コピーを終えたら、公開鍵の権限を所有者のみ読み込み可(400)とします。

    $ chown -R hoge. /home/hoge/.ssh/return
    $ chmod 400 /home/hoge/.ssh/authorized_keysreturn
    
    サーバーで鍵を作成した場合は、単純にファイル名を変更するだけで良いと思います。
    この時のファイル名authorized_keysは、SSHDのデフォルトの設定になっていますので、もし、sshd の設定を変更している場合は、その変更したファイル名を指定します。
    $ vi /etc/ssh/sshd_configreturn
    ...
    # 公開鍵の設置ファイル名を指定します。
    AuthorizedKeysFile     .ssh/authorized_keys
    ...
    
    もし、ファイル名を変更した場合は、sshd のリロードを実行します、

  3. クライアント側に 秘密鍵 を設定します。

    サーバー側で鍵を作成した場合のみ、サーバーから秘密鍵をダウンロードし、クライアント側に設置します。
    ダウンロードの際は、FTPを使わず、FTPS or SFTP or SCP を用いてダウンロードします。

    # これは、SFTPの例です。
    # サーバーのIPアドレス : 192.168.1.99 だとします。
    # クライアント端末から以下のようにsftpコマンドを発行します。
    #   -ポートを指定する場合、-oPort=22 のようにオプションを追加します。
    #   -秘密鍵ファイルを指定する場合、-oIdentityFile=id_rsa のようにオプションを追加します。
    $ sftp hoge@192.168.1.99return
    ...
    Connected to 192.168.1.99
    sftp> pwdreturn
    Remote working directory: /home/hoge
    sftp> cd .sshreturn
    sftp> lsreturn
    authorized_keys           id_rsa                    id_rsa.pub
    sftp> get id_rsareturn
    Fetching /home/hoge/.ssh/id_rsa to id_rsa
    /home/hoge/.ssh/id_rsa                        100% 1743     1.7KB/s   00:00
    sftp> byereturn
    

  4. 接続先SSHサーバーの SSHの設定を変更します。

    接続先SSHサーバーの SSHの設定を 公開鍵認証を可とし、パスワードによる認証を不可とします。

    /etc/ssh/sshd_config

    ...
    # プロトコルバージョンを2固定とします。
    Protocol 2
    ...
    # rhost RSA認証を不可にします。
    RhostsRSAAuthentication no
    # host based 公開鍵認証を不可にします。
    HostbasedAuthentication no
    # /etc/ssh_known_hosts または ~/.ssh/known_hosts を無視します。
    IgnoreUserKnownHosts yes
    # rhost を無視します。
    IgnoreRhosts yes
    ...
    # RSA認証を不可にします。
    RSAAuthentication no
    # 公開鍵認証を可にします。
    PubkeyAuthentication yes
    # 公開鍵の設置場所をユーザディレクトリ配下の .ssh/authorized_keys にします。
    AuthorizedKeysFile     .ssh/authorized_keys
    # 公開認証時のコマンドは実行しません。
    AuthorizedKeysCommand none
    # 公開認証時のコマンド実行時のユーザは、nobodyとします。
    AuthorizedKeysCommandRunAs nobody
    ...
    # パスワード認証を不可とします。
    PasswordAuthentication no
    # 空パスワードを不可とします。不要なのでコメントアウトします。
    # PermitEmptyPasswords no
    ...

    ここでは、念のため不必要な認証は、すべて不可にしています。
    ここで最小限必要な項目は、以下のものです。

    • PubkeyAuthentication yes
    • AuthorizedKeysFile .ssh/authorized_keys
    • PasswordAuthentication no

    設定を終えたら、sshd の再読み込みか、再起動します。

    $ /etc/init.d/sshd restartreturn
    sshd を停止中:                                             [  OK  ]
    sshd を起動中:                                             [  OK  ]
    

  5. sshコマンドを使って接続してみます。

    ここまで設定を終えたら、sshコマンドを使って接続してみます。

    # サーバーのIPアドレス : 192.168.1.99 だとします。
    # クライアント端末から以下のようにsshコマンドを発行します。
    #   -ポートを指定する場合、-p 22 のように指定します。
    #   -秘密鍵ファイルを指定する場合、-i id_rsa のように指定します。
    $ ssh -p 22 -i id_rsa hoge@192.168.1.99return
    # 鍵作成時に設定したパスフレーズを入力します。
    Enter passphrase for key 'id_rsa': *********return
    Last login: Thu Aug  1 07:11:54 2013 from client.example.com
    [hoge@example ~]$
    

    上記のようにログインできればOKです。

    以下のようなワーニングが出力されて、先に進めないことがあります。
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Permissions 0644 for 'id_rsa' are too open.
    It is required that your private key files are NOT accessible by others.
    This private key will be ignored.
    bad permissions: ignore key: id_rsa
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
    これは、単純に クライアント側の「秘密鍵 id_rsa のモードが誰でも読めるようになっているのでだめですよ。」という警告メッセージです。
    # モードを 600 or 400 へ変更します。
    $ chmod 400 id_rsareturn
    
    これで上記の警告は出力されなくなるでしょう。
    以下のエラーは、いろんな場合が考えられるので、非常にやっかいです。
    $ ssh -p 22 -i id_rsa hoge@192.168.1.99return
    Enter passphrase for key 'id_rsa':
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
    
    このエラーメッセージ自体は、「Permission denied」なので、拒否されたぐらいの意味でしかありません。
    このエラーメッセージは、主に以下のような場合が考えられます。
    • クライアント側の秘密鍵が正しく読めない(ファイル名とパーミッションを確認する)
    • サーバー側の公開鍵が正しく読めない
      • ファイル名がauthorized_keysでない
      • ディレクトリが正しくない(ログインするユーザホームディレクトリの .ssh 配下でなければなならい)
      • 各ディレクトリ、ファイルのパーミッションが正しくない(*1:参照)
      • ユーザがsshdで規制されている
    (*1)
    $ ls -l ~/.sshreturn
    drwx------ 2 hoge hoge 4096  8月  1 10:16 2013 .ssh
    
    /home/hoge/.ssh:
    -rw-r--r-- 1 hoge hoge  421  8月  1 10:16 2013 authorized_keys
    

    これ以外にも、いろんな場合が考えられます。
    上記に当てはまらない場合は、デバッグ情報を確認されることをおすすめします。
    $ ssh -p 22 -i id_rsa hoge@192.168.1.99 -vvvreturn
    ...
    
    -vvv オプションを追加するとデバッグ情報が出力されます。

うまく接続できたでしょうか。
この設定により、ユーザ+パスワードのみ場合に比べて安全になることは間違いありません。 セキュリティの向上は、常に意識しておいて損はありませんから、是非、やっておきましょう。

また、おまけですが、お名前.com VPS(KVM) や ConoHa VPS では、SSH Private Keyファイルをダウンロードできます。
お名前.com VPS(KVM)
  • SFTPでISOファイルをアップロードする場合
  • SSH接続経由でシリアルコンソールへ接続する場合
に使えます。また、デフォルトOSの場合は、VPSへの root による SSH接続 のためにも使用できます。(ConoHaでは、デフォルトでこの鍵認証になります)
但し、デフォルトOS(CentOS)の場合のみ使用できる鍵ですから、注意しましょう。カスタムOSや、ISOアップロードで好きなOSをインストール場合は、使えません。
ちょっと参考まで。





関連記事 :


コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

Genymotionとは、 公式サイト(http://www.genymotion.com/)には、以下のように記述があります。 G ...

以下のように Android x86 を仮想マシンへインストールし、色々と試してきました。 仮想マシンを使って Android ...

Android x86とは、 いわゆる Android のPC版OSです。 Android は、Googleによって開発されたスマー ...

Android x86とは、 いわゆる Android のPC版OSです。 Android は、Googleによって開発されたスマー ...

今回は、Mondo Rescue を使って バックアップとリストア(復元)をやってみたいと思います。 いまだに、さくらのVPSは、バッ ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ
Time : 0.2216 [s]