名古屋出身ソフトウェアエンジニアのブログ

autossh と systemd でリモートデスクトップ用のトンネルを永続化

公開:
更新:

外出先から家の PC を触りたいことがそこそこの頻度であり、autossh と systemd を使って SSH トンネルを永続化しました。インターネットに公開されている VPS に対して、自宅 LAN 内のラズパイから Windows PC へリモートデスクトップ用のトンネルを引き込み、外から PC を使えるようにしました。

環境

  • Raspberry Pi 3 Model B+
  • Raspberry Pi OS

autossh をインストール

apt でインストールしました。

sudo apt update
sudo apt install autossh

手動実行で接続

SSH の初回接続では接続先の確認プロンプトが出てしまい自動化の妨げになるので、先に一回繋いでおきます1

autossh <HOSTNAME>

サービスユニットを書く

CentOS と違い、autossh インストール時に Debian 系ディストリビューションではユニットファイルはついてこないようなので、自前で書く必要があります。

sudo nano /etc/systemd/system/autossh.service

通常のログインユーザー pi で実行し、VPS サーバーの 8089 番ポートで待ち受け2て、自宅 LAN 内の Windows リモートデスクトップ 10.10.10.10:3389 へ転送しています。 autossh の終了シグナルは SIGQUIT であるようなので、そのように設定します。

[Unit]
Description=AutoSSH for remote connect home
After=network.target

[Service]
User=pi
Group=pi
Type=simple
ExecStart=/usr/bin/autossh <HOSTNAME> -N -R 0.0.0.0:8089:10.10.10.10:3389
KillSignal=SIGQUIT
Restart=always
RestartSec=10s
SuccessExitStatus=SIGQUIT

[Install]
WantedBy=multi-user.target

サービスを有効化します。

sudo systemctl daemon-reload
sudo systemctl start autossh
sudo systemctl enable autossh

これでいつでも自宅 PC へアクセスできるようになりました。


  1. あるいは ~/.ssh/configStrictHostKeyChecking no を追加しておく。 ↩︎

  2. 実際の構成ではローカルホストにのみバインドして、接続側も SSH ポート転送を必須とすることで、よりセキュアにしました。 ↩︎