Mac OS X から Linuxサーバ へ、RSA 鍵を用いて SSH 接続する
準備
- (Linuxサーバで操作)サーバの OS やバージョンを確認
- (Linuxサーバで操作)ひとまずパスワード認証の接続を許可する
- (Linuxサーバで操作).ssh ディレクトリを作成しておく
- SSH 接続で使用するユーザアカウントで、サーバにログインする。
ここを参考にして、サーバ側で操作する。
cat /etc/`ls /etc -F | grep "release$\|version$"`
ここではサーバが Cent OS であると仮定しています。
OS によってはファイルの場所などが違うかもしれないので、適宜読み替えてください。
OS によってはファイルの場所などが違うかもしれないので、適宜読み替えてください。
これをしておかないと、後で作成する公開鍵をサーバ側へ送れない。
サーバ接続のために、ひとまずパスワード認証を許可しておく(ここを参考に)。
$ vi /etc/ssh/sshd_config ...(省略) PasswordAuthentication yes ...(省略) ChallengeResponseAuthentication yes ...(省略)
上記のように書きなおしたら、ssh を再起動する。
$ /etc/init.d/sshd reload sshd を停止中: [ OK ] sshd を起動中: [ OK ]
後で、公開鍵を置くために必要な「.ssh」ディレクトリを作成する。
$ mkdir ~/.ssh $ chmod 700 ~/.ssh
手順
- (Mac OS Xで操作)RSA 鍵を作成する(ここを参考に)
- (Mac OS Xで操作)作成した鍵を確認する
- (Mac OS Xで操作)作成した公開鍵を Linux サーバに送る
- (Linuxサーバで操作)受け取った公開鍵のパーミッションを変更
- (Mac OS Xで操作)SSH 接続できるか、確認する
- (Linuxサーバで操作)パスワード認証を不許可にする
ターミナル上で、
> 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 はパスのようなもので、今回は気にしないで良い。
> ls ~/.ssh/
id_rsa, id_rsa.pub という2つのファイルが出来てるはず。
前者が秘密鍵、後者が公開鍵というもので、公開鍵は公開してもOKだが、秘密鍵は秘密にしないといけない。
名前を変えたい場合は、もちろん変えても良いが、そのときは、configファイルを作成し、
> vi ~/.ssh/config
IdentityFile ~/.ssh/(変更した名前)
と記載しておく。
公開鍵 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の部分がポート番号)。
いよいよ最後の設定。
公開鍵の権限を変更して、所有者(つまり自分のアカウント)だけが読み書きできるようにする(ここを参考)。
$ cd ~/.ssh/ $ chmod 600 authorized_keys
パスワード無しでログインできるか、確認する。
> ssh (サーバのユーザ名)@(サーバのアドレス)
ポート指定するなら、
> ssh -p 10022 (サーバのユーザ名)@(サーバのアドレス)
10022がポート番号だ。
サーバ接続には 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
で確認できる。