はじめに
SSHの公開鍵/秘密鍵の生成やSSHのポート番号など既に設定済みのリモートサーバーに、今まで使っていたPC以外から接続する方法について記載します。なお、今回はConoHa VPSで作成したリモートサーバー(CentOS Linux 7)を使用します。
SSH設定の確認
まず、現在のSSH設定がどうなっているかを確認します。
ConoHaにログインし、対象サーバーのコンソールを起動します。
コンソールが起動したらrootユーザーでログインします。
ログイン設定
以下のコマンドを実行してSSHの設定ファイルを開きます。
# vi /etc/ssh/sshd_config
/etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
設定値 | 意味 |
---|---|
PermitRootLogin |
rootユーザーでのログインを許可するかどうか |
PasswordAuthentication |
パスワード認証を許可するかどうか |
後ほど、ConoHaの画面上から生成したSSH Keyを使ってリモートサーバーへSSH接続を行いますが、そのSSH Keyの所有者はrootユーザーのため、上記の設定がno
になっているとSSH Keyを使ってもログインすることができません。
そのため、あらかじめ上記の設定を以下のように変更します。
/etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
変更したら以下のコマンドを実行して設定を反映させます。
# service sshd restart
ポート番号設定
以下のコマンドを実行してポート番号設定ファイルを開きます。
# vi /etc/sysconfig/iptables
/etc/sysconfig/iptables
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
SSHのデフォルトのポート番号は22ですが、セキュリティの観点から上記のようにポート番号を変更している場合があります。後ほどSSH Keyを使ったSSH接続を行う際に上記のポート番号が必要になるので覚えておきます。
SSH Keyを使ったSSH接続
ConoHaの画面上から生成した鍵を使ってリモートサーバーへSSH接続します。
SSH Keyの準備
ConoHaにログインし、「セキュリティ」の中の「SSH Key」にアクセスし、「パブリックキー」ボタンを押下します。
「保存」ボタンを押下します。
表示されたモーダルウィンドウの中の「ダウンロード」ボタンを押下します。メッセージに書かれている通り、プライベートキーは一度しかダウンロードできません。プライベートキーをダウンロードする前にモーダルウィンドウを閉じてしまった場合は、新しいSSH Keyを再作成してください。SSH Keyはいくつでも作成可能ですが、セキュリティの観点から不要なSSH Keyは削除しておくことをおすすめします。
ダウンロードしたプライベートキーは紛失しないように適当なディレクトリに移動しておきます。
% mv ~/Downloads/yyyymmddhhmmss.pem ~/.ssh/private-key.pem
SSH Keyを使ったSSH接続
SSH Keyが準備できたら、以下のコマンドを実行してSSH接続します。
% ssh -i ~/.ssh/private-key.pem -p 10022 root@xxx.xxx.xxx.xxx
以下のようなエラーメッセージが表示される場合、rootユーザーでのログインが許可されていない可能性があります。「ログイン設定」セクションを参照して設定を確認してください。
root@xxx.xxx.xxx.xxx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
以下のようなエラーメッセージが表示される場合、ポート番号22でのSSH接続が許可されていない可能性があります。「ポート番号設定」セクションを参照して設定を確認してください。
ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
SSH Keyのパブリックキーについて
「SSH Keyの準備」セクションでSSH Keyを生成し、プライベートキーはローカルに保存しました。では、パブリックキーはどこにあるかというと、リモートサーバーの以下のディレクトリに存在します。このファイルを削除してしまうとSSH Keyを使ってSSH接続できなくなってしまうので、絶対に削除しないようにしてください。
# ls ~/.ssh
authorized_keys
一般ユーザーでのSSH接続
SSH Keyを使ったSSH接続は管理者権限を持つrootユーザーでログインすることになります。セキュリティの観点からSSH接続するユーザーは管理者権限を持たない一般ユーザーに限定したほうがいいでしょう。リモートサーバーに一般ユーザーを作成し、そのユーザーでSSH接続できるように設定します。なお、一般ユーザーが既に存在する場合は、「プライベートキーの設定」セクションから行ってください。
なお、ユーザー名を忘れてしまった場合は以下のコマンドでユーザー一覧を確認できます。
# cat /etc/passwd
それでもユーザー名がわからない、あるいはユーザー名はわかるがパスワードがわからないという場合は一般ユーザーの作成から行ってください。
一般ユーザーの作成
以下のコマンドを実行して一般ユーザーを作成します。
# adduser user
続いて以下のコマンドを実行してパスワードを設定します。
# passwd user
一般ユーザーが作成できたら、以下のコマンドで切り替えます。
% su user
SSH Keyの作成
一般ユーザーに切り替えてから以下のコマンドを実行してSSH Keyを作成します。
# SSH用ディレクトリの作成
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cd ~/.ssh
# SSH Keyの作成
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/path/to/.ssh/id_ed25519): # SSH Keyの名称(省略可)
Enter passphrase (empty for no passphrase): # 5文字以上のパスフレーズ
Enter same passphrase again: # 上記のパスフレーズを再入力
-t
オプションは鍵の種類を指定します。鍵の種類について詳細は省略しますが、Ed25519(楕円曲線暗号の一種)が性能/安全性ともに最強らしいです。鍵の長さは256で固定です(-b
オプションは無視されます)。
SSH Keyの名称は省略するとid_ed25519
id_ed25519.pub
というファイル名で作成されます。このとき、既に同名のファイルが存在する場合は以下のメッセージが表示され、上書きするかどうかを選択できます。
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/path/to/.ssh/id_ed25519):
/path/to/.ssh/id_ed25519 already exists.
Overwrite (y/n)?
作成したSSH Keyのうち、id_ed25519
がプライベートキーでid_ed25519.pub
がパブリックキーとなります。.pub
はpublicを意味し、これがついていればパブリックキー、ついていなければプライベートキーです。
パブリックキーのファイル名を以下のように変更します。
$ mv id_ed25519.pub authorized_keys
SSHのデフォルト設定では、パブリックキーとして.ssh/authorized_keys
ファイルをチェックするようになっています。
/etc/ssh/sshd_config
AuthorizedKeysFile .ssh/authorized_keys
最後に、パブリックキーの権限を以下のように変更します。
$ chmod 600 authorized_keys
プライベートキーの設定
プライベートキーの内容をクリップボードにコピーします。
$ cat id_ed25519
# 表示された内容をクリップボードにコピー
リモートサーバーからログアウトし、ローカルで先ほどコピーしたプライベートキーと同じ内容のプライベートキーを作成します。
% vi ~/.ssh/id_ed25519
# 先ほどコピーした内容をペースト
プライベートキーの権限を以下のように変更します。
% chmod 600 ~/.ssh/id_ed25519
SSH接続設定
SSH接続設定ファイルにリモートサーバーの接続設定を追加します。
% vi ~/.ssh/config
~/.ssh/config
Host remote-server
HostName xxx.xxx.xxx.xxx
IdentityFile ~/.ssh/id_ed25519
User user
Port 10022
リモートサーバーに接続できるか確認します。
% ssh remote-server
Enter passphrase for key '/path/to/.ssh/id_ed25519': # SSH Keyのパスフレーズを入力
ログイン設定を戻す
一般ユーザーでSSH接続できるようになったので、rootユーザーでSSH接続できないよう設定し直します。リモートサーバーにSSH接続し、以下のコマンドを実行します。
$ sudo vi /etc/ssh/sshd_config
以下の設定をyes
からno
に変更します。
/etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
変更したら以下のコマンドを実行して設定を反映させます。
# service sshd restart
まとめ
SSHの公開鍵/秘密鍵の生成やSSHのポート番号など既に設定済みのリモートサーバーに、今まで使っていたPC以外から接続する方法についてまとめてみました。
だいぶ前にリモートサーバーを構築し、SSH接続の設定もそのとき以来だったので忘れていることも多く、新しいPCでSSH接続できるようになるまで大変だったので、備忘録という意味も含めてまとめてみました。参考にしていただければと思います。