SSH設定済みのリモートサーバーに別のPCからSSH接続する方法

2022年5月8日 23:31

はじめに

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接続できるようになるまで大変だったので、備忘録という意味も含めてまとめてみました。参考にしていただければと思います。

関連記事

ConoHa VPSのハードウェア障害によるSSH接続不可・Webサイトアクセス不可の対処方法
# はじめに 6月2日夜間にConoHa VPSにて障害が発生していました。 <img data-src="https://i.imgur.com/SBcK4aA.png" class="lazyload effect-fade"> [...]
2020年6月3日 9:31
SSH接続時に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」が出る場合の対処法
ConoHa VPSにRails実行環境を構築している際、以前は出ていなかったエラーが出るようになっていて、なんでだろうと思っていたら選択するOSが以前と違っていたからでした。 10月初旬頃に構築したときは、ConoHa VPSで対応しているCen [...]
2019年11月27日 13:34
MacからサーバーにSSH接続する方法
(初心者向け)vpsを契約して、capistrano3でRailsアプリをデプロイするまで [その1 サーバー設定編] こちらの記事の「2. SSHの設定」を行っても以下のコマンドでSSH接続できなかったので、MacでSSH接続する方法を調べまし [...]
2019年11月26日 22:15