Skip to main content

VPS(Ubuntu/Debian)でRとPythonとJuliaの開発環境を作る: part1

はじめに

概要

VPS (Ubuntu/Debian) を借りてRとPythonとJuliaの開発環境を作るところまでの基本的な設定の仕方です。UbuntuでもDebianでもどちらでも同じように設定できます。ConoHa VPSを利用していますが、Ubuntu/DebianであればConoHaではない他のVPSでも同じように進められると思います。

part1ではssh接続の設定について書きます。これらの設定を入れることにします。

  • rootユーザでのsshログインを許可しない
  • 秘密鍵でのsshログインのみ許可し、パスワードログインを禁止
  • ポート番号を22番から変更
  • 許可したポート番号以外のポート番号を閉じる

環境

  • VPS
    • ConoHa VPS(メモリ1GB)
    • Linux
      • Ubuntu: Ubuntu 22.04.1 LTS / Debian: Debian 11
  • ローカル環境
    • Windows 10 Home

関連記事

VPS契約

ブラウザからConoHaにログインして新しくVPSを立てます。詳しくは公式のガイドを参照ください。

「接続許可ポート」のオプションは、ポート開放はあとでVPS上からufwで行うので、「全て許可」にチェックを入れます。また、「SSH Key」は、後でローカルで作成するので、「使用しない」にチェックを入れます。

なおConoHaではスペックのグレードを選ぶことができますが、メモリ1GB以上のプランを選んでおくといいです。VPSを立てた後からプランをアップグレード・ダウングレードできますが、512MBプランはその対象外であるためです。

パッケージのアップデート

ローカルのWindowsのコマンドプロンプトを立ち上げ、rootユーザでsshログインします。パスワードを聞かれるので、VPSを立てる時にConoHaの設定画面で入力したrootパスワードを入力してください。

なお、以下、かっこ([])で囲った部分は、何らかの値を入れることを示します。実際にコマンドを打つ際はかっこは不要です。

# sshはデフォルトでは22番ポートでログインするので、"-p 22"は付けなくていい
ssh root@[VPSのIPアドレス]

ログイン後、まずはパッケージをアップデートします。

apt update -y
apt upgrade -y
apt dist-upgrade -y
apt --purge autoremove

再起動するようメッセージで求められた場合はrebootで再起動してください。再起動されるまで数十秒程度かかりますので、そのくらいの時間待ってから再度rootユーザでsshログインします。

一般ユーザの作成+sudoユーザー化

セキュリティの観点からrootユーザではssh接続できないようにします。そのため、sudo権限を持つ一般ユーザーを作成し、このユーザーにsshでログインすることにします。

ここから先、userというユーザー名のユーザーを作成することにします。

# "-m"を付けることで、/home/直下にユーザーフォルダを作成する
useradd -m user

次にsshのログインパスワードを設定します。パスワードを聞かれるので、設定したいパスワードを入力してください。

passwd user

ここまで終わったら、以下id userと入力すると、(sudo)の文字列は出てこないはずです。これは、userがsudo権限を持っていないユーザーであることを示します。

id user
# (sudo)の文字列が出てこない = sudoerではない
# uid=xxxx(user) gid=xxxx(user) groups=xxxx(user)

userをsudoerにします。

gpasswd -a user sudo

ここまで終わったら、id userと入力すると、(sudo)の文字列が表示されるはずです。

id user
# (sudo)の文字列が表示される = sudoer
# uid=xxxx(user) gid=xxxx(user) groups=xxxx(user) xxxx(sudo)

rootでのsshログイン禁止

exitと打ってログインを切ってから、以下をローカルのコマンドプロンプトで打ってuserでログインします(ログインを切らずにsu userでもいいです)。パスワードを入力する必要があるので、passwd userで設定したパスワードを入力してください。

ssh user@[VPSのIPアドレス]

ssh接続の設定ファイルである/etc/ssh/sshd_configを編集します。sudo権限でないと編集できないので、sudoをコマンドの先頭に付けます。

sudo nano /etc/ssh/sshd_config

/etc/ssh/sshd_configがnanoで開きます。PermitRootLogin yesと書いてある行があるので、このyesnoに書き換え、保存してsshd_configを閉じます。

なお、nanoではCtrl + Oを押してからEnterを押して上書き保存し、次にCtrl + Xで閉じることができます。

上書き保存してnanoを終了できたら、以下のコマンドでsshd_configの変更内容を反映させます。

sudo systemctl restart sshd

rootではsshログインできず、userではログインできることを確認しておく必要があります。

ローカルでコマンドプロンプトを別窓で立ち上げ、ssh root@[VPSのIPアドレス]ではログインできなくなったことを確認しておきます。次にssh user@[VPSのIPアドレス]ではログインできることも確認しておきます。

このとき、今設定のために接続しているコマンドプロンプトは閉じず、別窓でコマンドプロンプトを開くことに注意してください。sshの設定に失敗して接続できなくなった場合、接続できていたコマンドプロンプトを閉じてしまうとsshでログインできなくなってしまいます。(仮にそうなったとしても、ConoHaではブラウザの設定画面からコンソールログインができるはずですが…。)以降もssh接続の設定を変える度に都度接続できることを確認していきますが、必ず今繋いでいるコマンドプロンプトを閉じないで別窓で確認するようにします。

ssh鍵の作成と登録

ローカルに、VPSと接続するための秘密鍵と公開鍵を作ります。

rootユーザでログインしているコマンドプロンプトを閉じてssh接続を切ってから、以下を入力します。ユーザーフォルダ直下に.sshフォルダが存在しなければ先に.sshフォルダを作成してください。-fの後には鍵のファイルに付けたいファイル名を入れます。ここでは仮でhogeとしておきます。

cd [ユーザーフォルダ直下の.sshフォルダのパス]
ssh-keygen -t ed25519 -f hoge

passphraseを入力してくださいなどと3回ほど入力を求められるはずですが、全て何も入力せずにEnterキーを押してください。

そうすると、ユーザーフォルダの直下の.sshフォルダにhogeとhoge.pubという二つのファイルが作られていると思います。前者は秘密鍵、後者は公開鍵です。

次に、今作成した鍵のうち、公開鍵(hoge.pub)をVPSの~/.ssh/authorized_keysに保存します。ssh user@[VPSのIPアドレス]でVPSのuserにsshログインしてから、ターミナルで以下を入力します。

cd ~
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
nano .ssh/authorized_keys

nanoで~/.ssh/authorized_keysが開きます。ここでローカルでhoge.pubを開き、中身を全選択 -> クリップボードにコピーし、sshで接続しているコマンドプロンプトのnanoの画面に貼り付けて上書き保存してください。

念のためcat .ssh/authorized_keysを実行し、ローカルのhoge.pubと同じものが貼り付けられていることを確認します。

最後に.ssh/authorized_keysに600のパーミッションを設定します。

chmod 600 .ssh/authorized_keys

ここで、正常に秘密鍵でssh接続できることを確認します。今VPSにssh接続しているコマンドプロンプトとは別窓でコマンドプロンプトを立ち上げ、以下を入力してssh接続できることを確かめてください。

ssh user@[VPSのIPアドレス] -i [ローカルの秘密鍵hogeのフルパス]

パスワードログインの禁止

次に、全てのユーザでパスワードログインできないようにします。

sudo nano /etc/ssh/sshd_config

PasswordAuthentication yesと書いてある行があるので、そのyesnoに変えて上書き保存します。私の場合、PasswordAuthenticationは2箇所あったので、2箇所ともnoに変えました。

以下で設定を反映させます。

sudo systemctl restart sshd

今ssh接続しているコマンドプロンプトとは別窓でコマンドプロンプトを立ち上げ、パスワード認証ではログインできず、かつ鍵ではログインできることを確認します。

# パスワードログインしてみる
# これはエラーでログインできないことを確認する
ssh user@[VPSのIPアドレス] -o PreferredAuthentications=password
# 次に、鍵でログインしてみる
# これはログインできることを確認する
ssh user@[VPSのIPアドレス] -i [ローカルの秘密鍵hogeのフルパス]

ポート開放+sshのポート番号の変更

sshのポート番号はデフォルトでは22番ですが、これを他の適当な番号に変えます。

ポート番号は0番~65535番まであり、うち0番~1023番のWell-known Portは他のサービスで使われることもあるので、1024番以上のポートにしましょう。1024番~49151番のRegistered Portも使われていることがあるので、好みが特になければユーザーが自由に使えることになっている49152番以降のポート番号にするといいと思います。ここでは仮に50022番に変更することにします。

まず、念のため50022番がポート番号として使われていないことを確認します。

sudo lsof -i:50022

何もコンソールに表示されなければ使われていないので問題ありません。

ポート開放

ポート開放の設定に使うufwをインストールし、OSが起動した際に自動起動するようにします。

sudo apt install ufw
sudo systemctl enable ufw

それでは次に、ufwを使ってファイアウォールの設定を変更し、50022番を通すようにします。その前に、50022番が開放されていないことを念のため確認します。

sudo ufw status

50022番がallowされていなければ、開放する必要があります。allowされていれば以下の開放の必要はありません。(私が試した所、初期状態では22番のOpenSSHしか開放されていませんでした)

sudo ufw allow 50022

再度sudo ufw statusと打って、50022番がallowとなっていればOKです。

ssh接続のポート番号の変更

そしたら、sshd_configを編集してssh接続に使用するポート番号を変更します。

sudo nano /etc/ssh/sshd_config

Port 22と書いてある行があると思います。この2250022に変更して上書き保存します。

以下で設定を反映させます。

sudo systemctl restart sshd

最後に、今ssh接続しているコマンドプロンプトとは別窓でコマンドプロンプトを立ち上げ、22番ではログインできず、50022番ではログインできることを確認します。

# これはエラーでログインできないことを確認する
ssh user@[VPSのIPアドレス] -i [ローカルの秘密鍵hogeのフルパス] -p 22
# 次に、これはログインできることを確認する
ssh user@[VPSのIPアドレス] -i [ローカルの秘密鍵hogeのフルパス] -p 50022

これでひとまず最低限のssh接続のセキュリティ確保の設定が終わりました。お疲れ様でした。

ConoHaではVPSのディスクイメージを保存しておくことができます。VPSを削除しても、新しくVPSを作る際に、保存したディスクイメージから復元することができ便利です。この段階で一旦VPSのディスクイメージを作っておくと役立つかもしれません。

ローカルのconfigにsshログインの設定を記載

さて、これからはssh user@[VPSのIPアドレス] -i [ローカルの秘密鍵hogeのフルパス] -p 50022でログインするわけですが、毎回これを入力するのは面倒です。それを簡略化できるように、ローカルの~/.ssh/configにssh接続の設定を記載します。

ローカルのユーザーフォルダ直下の.ssh/configを適当なエディタで開き、以下を追記して上書き保存します。

Host conoha
    HostName [VPSのIPアドレス]
    User user # VPSで接続したいユーザー名。ここでは先程作ったuser
    Port 50022
    IdentityFile [上で作成した秘密鍵 (hoge) のフルパス]

Host conohaconohaは好きな名前にしてください。ただし、.ssh/configの中では一意な名前にする必要があります。

Identity Fileは、Windowsではファイルパスの区切り文字はバックスラッシュですが、バックスラッシュでもUnix風のスラッシュ(~/.ssh/hoge)でもどちらでも構いません。

これにより、今後はssh user@[VPSのIPアドレス] -i [ローカルの秘密鍵hogeのフルパス] -p 50022の代わりにssh conohaでログインできるようになります。

ローカルのVSCodeに拡張機能Remote Developmentをインストール

VSCodeの拡張機能Remote Developmentを入れると、VSCode上でssh接続し、あたかもローカルのファイルを操作しているかのように作業ができます。入れ方は良記事がたくさんあるのでググってみてください。

この拡張機能は色々便利なのですが、VSCodeからssh接続してターミナルでcode [開きたいファイルのパス]と打つと、VSCode上でそのファイルが開かれて編集できることが中々快適です。nano [開きたいファイルのパス]の代わりになります。