Mac OS X から Linuxサーバ へ、RSA 鍵を用いて SSH 接続する

目的

サーバへのアクセスの利便性と保守性を高めるために、SSH 接続する。
SSH 接続には、RSA 鍵が必要だ。

準備


  1. Linuxサーバで操作)サーバの OS やバージョンを確認

  2. ここを参考にして、サーバ側で操作する。

    cat /etc/`ls /etc -F | grep "release$\|version$"`
    

    ここではサーバが Cent OS であると仮定しています。
    OS によってはファイルの場所などが違うかもしれないので、適宜読み替えてください。


  3. Linuxサーバで操作)ひとまずパスワード認証の接続を許可する

  4. これをしておかないと、後で作成する公開鍵をサーバ側へ送れない。
    サーバ接続のために、ひとまずパスワード認証を許可しておく(ここを参考に)。

    $ vi /etc/ssh/sshd_config
    ...(省略)
    PasswordAuthentication yes
    ...(省略)
    ChallengeResponseAuthentication yes
    ...(省略)
    

    上記のように書きなおしたら、ssh を再起動する。

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


  5. Linuxサーバで操作).ssh ディレクトリを作成しておく

  6. 後で、公開鍵を置くために必要な「.ssh」ディレクトリを作成する。

    1. SSH 接続で使用するユーザアカウントで、サーバにログインする。
    $ mkdir ~/.ssh
    $ chmod 700 ~/.ssh
    

    別のユーザBでログインして.sshディレクトリを作成すると、所有者がユーザBになってしまうので注意。
    必ず、SSH 接続に使用するユーザアカウントでディレクトリを作成すること。

手順


  1. Mac OS Xで操作)RSA 鍵を作成する(ここを参考に

  2. ターミナル上で、

    > ssh-keygen -t rsa
    Generating public/private rsa key pair. Enter file in which to save the key
    (/Users/yyyyyyy/.ssh/id_rsa): (リターンを入力) 
    Enter passphrase (empty for no passphrase): (リターンを入力) 
    Enter same passphrase again: (リターンを入力) 
    Your identification has been saved in /Users/yyyyyyy/.ssh/id_rsa. 
    Your public key has been saved in /Users/yyyyyyy/.ssh/id_rsa.pub. 
    The key fingerprint is: xxxxxxxxxxxxxxxxx
    

    yyyyyyy は、Mac OS X のユーザアカウント名、
    xxxxxxxxxxxxxxxxx はパスのようなもので、今回は気にしないで良い。


  3. Mac OS Xで操作)作成した鍵を確認する
  4. > ls ~/.ssh/
    

    id_rsa, id_rsa.pub という2つのファイルが出来てるはず。

    前者が秘密鍵、後者が公開鍵というもので、公開鍵は公開してもOKだが、秘密鍵は秘密にしないといけない。

    名前を変えたい場合は、もちろん変えても良いが、そのときは、configファイルを作成し、

    > vi ~/.ssh/config
    IdentityFile ~/.ssh/(変更した名前)
    

    と記載しておく。


  5. Mac OS Xで操作)作成した公開鍵を Linux サーバに送る

  6. 公開鍵 id_rsa.pub をサーバに scp を使って送付する(もちろん、Filezillaなどを使ってもOK)。同時に、鍵の名前を authorized_keys としておく。

    > scp ~/.ssh/id_rsa.pub サーバのユーザ名@サーバのアドレス:~/.ssh/authorized_keys
    

    決して秘密鍵を送付しないように。秘密鍵は公開してはいけない。自分のローカルマシンの中だけの秘密だ。

    もし、サーバ側の受信ポートを指定するなら、ここを参考にして、

    > scp -P 10022 ~/.ssh/id_rsa.pub サーバのユーザ名@サーバのアドレス:~/.ssh/authorized_keys
    

    のようにすると良い(10022の部分がポート番号)。


  7. Linuxサーバで操作)受け取った公開鍵のパーミッションを変更

  8. いよいよ最後の設定。
    公開鍵の権限を変更して、所有者(つまり自分のアカウント)だけが読み書きできるようにする(ここを参考)。

    $ cd ~/.ssh/
    $ chmod 600 authorized_keys
    


  9. Mac OS Xで操作SSH 接続できるか、確認する

  10. パスワード無しでログインできるか、確認する。

    > ssh (サーバのユーザ名)@(サーバのアドレス)
    

    ポート指定するなら、

    > ssh -p 10022 (サーバのユーザ名)@(サーバのアドレス)
    

    10022がポート番号だ。


  11. Linuxサーバで操作)パスワード認証を不許可にする

  12. サーバ接続には SSH 接続のみを許可し、パスワード認証は不許可にする。

    $ vi /etc/ssh/sshd_config
    ...(省略)
    PasswordAuthentication no
    ...(省略)
    ChallengeResponseAuthentication no
    ...(省略)
    

    上記のように書きなおしたら、ssh を再起動する。

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


これで、SSH 接続ができるようになったはず。
もし、できないのであれば、パーミッションを真っ先に疑うべき(ここ)が詳しい。

接続エラーのログは、サーバ側の /var/log/secure に記載されている。

$ cat /var/log/secure

で確認できる。