環境
- ローカル環境:Windows 10
- 構築するサーバー:Ubuntu 18.04 LTS
サーバーの追加
Conoha VPSのメニューから、サーバー追加を選択して、サーバーを追加する。
注意すべきポイントは以下のとおり。
- イメージタイプはUbuntu 18.04
- rootパスワードを設定して、忘れないようにする。
- SSH Keyは使用しない(あとから設定する)
- 接続許可ポートは全て許可
- ネームタグは後から変更できる(特に影響はない)
- それ以外の項目は特に設定しない
上記の項目に注意して、サーバーを追加する。
サーバーにアクセス
追加したサーバーの管理画面に移動する。
そこで、ネットワーク情報からサーバーのIPアドレスを参照する。(以下アドレスをx.x.x.xとする)
コマンドプロンプト(Winキーを押してcmd
と押すと出てくる)を開いて以下のコマンドを入力すると、サーバーにssh接続できる
# x.x.x.xにrootというユーザー名で接続する
ssh root@x.x.x.x
# ここでパスワードを問われるので、rootパスワードを入力
もし、sshコマンドがありませんと言われる場合はOpenSSHが入っていない可能性がある。
以下、sshで接続した状態での操作をサーバー上での操作、sshで接続していない状態での操作をローカル上での操作という。
新規アカウントを追加
続いて、サーバー上にアカウントを追加する。
sknjpnという名前で作成したが、もちろん好きな名前に変更すべきである。
# sknjpnという名前のアカウントを追加
adduser sknjpn
# パスワード以外の項目は何も書かずにEnterでよい
# sknjpnをsudoグループに追加
gpasswd -a sknjpn sudo
参考:ubuntu ユーザを追加して sudo 権限をつける
SSH接続出来るようにする
現在のパスワード認証ではなく、公開鍵認証にする。
新規作成したアカウントでアクセスする
一旦サーバーからログアウトする
exit
# ここで、コマンドプロンプトが落ちた場合は、再度コマンドプロンプトを立ち上げる。
鍵の作成とサーバーへの公開鍵の配置
以下はローカル上での操作であることに注意する。
公開鍵(id_rsa.pub
)は名前通り公開して問題ないが、秘密鍵(id_rsa
)は公開してはいけない。(OpenSSHがSSH接続時に参照するのみ)
サーバー上に上げるときはid_rsa.pub
を用いる
# 鍵を作成する
ssh-keygen -t rsa
# 作成場所を聞かれるが、デフォルトのままにする。保存場所は次のコマンド入力に用いる。
# パスフレーズは毎回入力が面倒になるので何も入力せずEnterを押す
# 公開鍵をサーバーに送信する(sknjpnは新規作成したアカウント名に変更すること。C:\Users\sknjpn\.ssh\id_rsaは保存場所を入力)
scp C:\Users\sknjpn\.ssh\id_rsa.pub sknjpn@x.x.x.x:~/authorized_keys
# サーバーにログイン
ssh sknjpn@x.x.x.x
# authorized_keysを.sshファイル内に移動
mkdir .ssh
mv authorized_keys .ssh/
# サーバーからログアウト
exit
# サーバーにログイン
ssh sknjpn@x.x.x.x
# この時、パスワードの入力が求められないならば公開鍵認証が有効となっている。
SSH接続時のセキュリティ設定
まず、パスワード認証より安全な公開鍵認証でサーバーにログインが可能となった。
これ以降でパスワード認証によってSSH接続してくるとしたら、それはたぶん貴方ではない誰かである。
というわけで、パスワード認証の禁止も含めたセキュリティ上の設定を行う。
# vimのインストール(たぶん、不要な場合が多いが念のため)
sudo apt install vim -y
# SSH接続の設定ファイルを修正
sudo vim /etc/ssh/sshd_config
以下のように設定してください(Vimによる編集は、iキーを押すと入力が出来るようになります)
-
#Port 22
をPort XXXXX
に(XXXXXは1024から65535のいずれかの番号を入力。後で使うのでこの番号を覚える) -
PermitRootLogin yes
をPermitRootLogin no
に -
PasswordAuthentication yes
をPasswordAuthentication no
に -
#ClientAliveInterval 0
をClientAliveInterval 60
に
ClientAliveInterval
を設定することで、SSH接続が勝手に切断されなくなります。(しなくてもよい)
参考:(ssh 接続をタイムアウトしないようにする)[https://gist.github.com/koudaiii/dc6ea63fa0258c39987d]
設定が終了したら、ESCキーをおして、:wq
と入力してEnterキーを押してください(上書き保存)
そうしたら、接続が問題なくできるか確認してください
# 変更の適用
service sshd restart
# ログアウト
exit
# XXXXX番ポートでログイン
ssh -p XXXXX sknjpn@x.x.x.x
これで接続出来たら成功です。
パッケージの更新
以下のコマンドを入力して、パッケージを更新してください。
sudo apt update
sudo apt upgrade -y
VSCodeでサーバーに接続する
これは、ほぼおまけです。
まず、Extensions
から、Remote Development
をインストールしてください。
そうしたら、Remote Explorer
アイコンをクリックして、上部の設定をContainers
からSSH Targets
に変更します。
SSH Target
を追加すると、sshのコマンド入力が求められますが、この時にこれまでと同様にssh -p XXXXX sknjpn@x.x.x.x
を入力すれば接続できます。
参考:VSCodeのRemote Developmentを使ってみる
もし最初からやり直す場合
サーバーを削除して、再度一番上から実行すれば良いのですが、一点注意がありまして、
ローカル上に、サーバーへのSSH接続情報が残っていると、新規作成したサーバーをなりすましだと認識して接続出来なくなるので、known_hosts
ファイルを修正する必要があります。
ローカル上にC:\Users\sknjpn\.ssh\known_hosts
というファイルがあると思いますので、(id_rsa
があるのと同じ場所です)
そのファイルを削除するか、開いて接続したサーバー情報が書かれている行を削除してください。
さいごに
CentOSを使う場合などはいくつかのコマンドが異なりますし、基本的にUbuntuの場合の解説となっています。
またOpenSSHなど、ローカルの環境に応じて、書かれている通りに動かない場合があります。
もし、ご意見、ご感想等ありましたら、お気軽にコメントください。
以上で、解説は終わりです。