外部から自宅PCにアクセス

Posted on 日 09 10月 2022 in 開発環境

はじめに

本記事に書いてある手順を実行することは大きなセキュリティリスクになりえます。 セキュリティに関する記事を読み漁りながら安全な方法を見つけたつもりですが、私が知らないセキュリティホールがあるかもしれません。 そのため、この記事を読んだ結果起こったいかなることも責任を負いかねます。つまり、自己責任でお願いします。

環境

自宅PC

Ubuntu 22.04

VPS

Ubuntu 22.04

事前準備

自宅PCに開けるポート:HOME_PORT VPSに開けるポート:VPS_PORT VPSのIPアドレス:VPS_IP

とします。

例えば、HOME_PORT = 54321のようになります。

このうち、HOME_PORTVPS_PORTはシステムポート以外(=1024~65535)で好きな番号を設定してください。

そして、自宅PCで、~/.remotesshを作成して、以下のように書き込んでください。

SSH_VPS_PORT=VPS_PORT
SSH_HOME_PORT=HOME_PORT
SSH_VPS_NAME=VPS_IP

VPS側での作業

VPSにsshできる前提で話を進めます。 もし、oepnssh serverがない場合は、自宅PCと同様の作業を行ってください。ただし、HOME_PORTの代わりに、VPS_PORTを使う必要があります。

公開鍵暗号の作成

ssh-keygen -t ed25519 -C "vps"

と実行し、~/.ssh/id_ed25519.pubの内容をコピーしてください。

configファイルの作成

~/.ssh/configファイルを作成し、以下のように設定してください。

Host 好きな名前
    HostName localhost
    User 自宅PCのユーザー名
    Port VPS_PORT
    ForwardX11 yes # x11 forwardingできるようになる
    ServerAliveInterval 60 # ずっと放置してても繋がり続ける
    IdentityFile ~/.ssh/id_ed25519

自宅PCでの作業

oepnssh serverを建てる

sudo apt install openssh-server
sudo vi /etc/ssh/sshd_config

として、

# 変更前
# PORT 22

# 変更後
Port HOME_PORT

のように編集してください。

その後、下のコマンドを実行してopenssh serverを再起動してください。

sudo systemctl restart sshd

HOME_PORT を開ける

sudo apt install -y ufw

sudo ufw enable
sudo ufw allow HOME_PORT

上のように実行することで、HOME_PORTへのアクセスを許可するように設定します。

TODO: VPSのIPアドレスからのみ許可する

VPSの公開鍵を登録する

先ほどコピーした ~/.ssh/id_ed25519.pubの内容を、~/.ssh/authorized_keysの中に貼り付け、保存してください。

実際に接続する

ssh -NR VPS_PORT:localhost:HOME_PORT VPS_IP

上のコマンドを使うことで、リモートフォワードをつなげます。 その結果、VPSのVPS_PORTにアクセスすると、自宅PCのHOME_PORTにアクセスできます。 何も出力されないはずですが、そのまま置いておいてください。

では、

  1. 自宅PC→VPSにssh
  2. VPS→自宅PCにssh

して、VPSから自宅PCにsshできることを確かめましょう。

# VPSにsshする
ssh VPS_IP

# ここはVPSの中にいる状態です
ssh 上で書いた好きな名前

うまく行っていれば、上の2行のコマンドを実行するだけで自宅PCにsshできます。

リモートフォワードをserviceとして登録する

~/.config/systemd/user/remotessh.serviceというファイルを作成し、下の内容を書き込んでください。

[Unit]
Description="外部からssh"

[Service]
EnvironmentFile=/home/ユーザー名/.remotessh
ExecStart=ssh -NR ${SSH_VPS_PORT}:localhost:${SSH_HOME_PORT} ${SSH_VPS_NAME}
ExecStop=/bin/kill ${MAINPID}

[Install]
WantedBy=defalt.target

これにより、systemctl --user start remotessh.serviceと実行すればVPSから自宅PCにアクセスできるようになり、systemctl --user stop remotessh.serviceと実行すればアクセスできないようになります。

参考記事

ubuntu自宅サーバにsshで外部からアクセス - 勇往邁進