LoginSignup
0
3

More than 1 year has passed since last update.

Reverse SSHによる、踏み台VPS経由のUbuntuマシンへのアクセスについての備忘録

Last updated at Posted at 2021-12-02

はじめに

Ubuntu 20.04LTSを載せたワークステーションを導入したので、そこへ外部からアクセスするための手法をまとめておく。同様にUbuntuを載せたRaspiにも全く同じ方法でアクセスしている。単純なSSH Remote Port Forwardの設定は良しとしても、自動起動を有効にするためのsystemd関係で少々ハマったので、自分用にその備忘録を残しておく。

Reverse SSHを使うと何が嬉しいのか

Gateway等をいじらなくても、内部のマシンに外部からアクセスできるようになること

接続構成

SSHは、以下のセッションを張る。

  1. 最終的な接続先となるUbuntu WSをSSHクライアントとし、踏み台VPSのsshdへ常時接続 (systemd経由)
  2. 接続元となるユーザをSSHクライアントとし、踏み台VPSのsshdへ接続
  3. 踏み台サーバをSSHクライアントとして、1のSSH接続を通じてUbuntu WSのsshdへ接続
[Ubuntu WS] --(SSH Conn 1.)--> [踏み台VPS] <--(SSH Conn 2.)-- [User]
    |                              |
     <-------(SSH Conn 3.)---------

このとき、ユーザは2と3の接続を経由することでUbuntu WSとやり取りをすることになる。
キモとしては、1.のSSH接続においてRemote Port Forwardingを有効にすることで、踏み台VPSのlocal port経由でUbuntu WSにアクセス可能としているところ。

まずは踏み台VPSの設定

sshdを立ち上げて、外部から公開鍵認証でアクセスできるようにしておく。TCP Keep Aliveとかの設定もした方が良いとは思うが今回はしていない。VPSでのSSHの設定は、過去の備忘録に記載した時からほとんど変わっていない。

Ubuntu WSからVPSへの常時接続設定

前提条件:

  • Ubuntu WSから、踏み台VPSへSSHアクセスが可能
  • Ubuntu WSへは、ローカルネットワークなどからはSSHで接続可能。
  • 踏み台VPSとUbuntu WS共に、Reverse SSH専用のユーザrsshを作成しておく。 ※別に新規で作らず既存ユーザを使い回しても良い。

~/.ssh/configの設定

ユーザrsshのssh configを作成する。

~/.ssh/config
Host Fumidai-VPS                                ← 踏み台VPSの名前
  HostName              xxx.xxx.xxx.xxx         ← 踏み台VPSのIPアドレス
  Port                  50022                   ← 踏み台VPSのSSH Port
  ExitOnForwardFailure  yes
  ServerAliveInterval   60
  TCPKeepAlive          no
  IdentityFile          ~/.ssh/id_ecdsa_from_ws ← 踏み台VPSへのSSH接続に用いる秘密鍵
  User                  rssh                    ← 踏み台VPSのSSHユーザ名。rsshがいる前提。

systemd経由での自動起動・自動再接続の設定

ユーザrsshで、WSのブート時に自動でSSH接続されるようにする。

その際、SSH Remote Port Forwardingを有効にし、踏み台VPSのlocalhost:2222へのアクセスがUbuntu WSへ転送されるようにする。

1. userレベルのsystemdの設定を作成

ユーザrssh~/.config/systemd/user/reverse_ssh.serviceを作成する。

~/.config/systemd/user/reverse_ssh.service
[Unit]
Description=Reverse SSH Tunneling
After=network.target auditd.service

[Service]
ExecStart=ssh -NR 2222:localhost:50022 Fumidai-VPS
Type=simple
Restart=always
RestartSec=1
StartLimitBurst=0

[Install]
WantedBy=default.target

2. XDG_RUNTIME_DIRの設定

ユーザrsshsystemdを有効にするのに、~/.bashrcないし~/.bash_profileあたりに以下を追記しておく。

~/.bashrc
export XDG_RUNTIME_DIR=/run/user/`id -u`

追記した後は$ source ~/.bashrcをして変更を読み込んでおく。

コマンドidでわかるrsshのidのディレクトリが/run/user/以下にないようであれば、以下でrsshに対してlingerを有効にしておく。

bash
$ sudo loginctl enable-linger rssh

3. systemd登録

ユーザrsshsystemdreverse_ssh.serviceを登録する。

shell
$ systemctl --user daemon-reload
$ systemctl --user start reverse_ssh
$ systemctl --user enable reverse_ssh

4. 接続確認

踏み台VPSの任意のユーザより、以下のコマンドでUbuntu WSの任意のユーザ(e.g., user_ws)へSSH接続可能かどうかを確認する。

shell
$ ssh user_ws@localhost -p 2222

この例では、Ubuntu WSの/etc/ssh/sshd_configでパスワード認証が有効になっていると仮定している。もちろん設定すれば公開鍵認証も可能。

ユーザクライアントの設定

~/.ssh/configにてProxyCommandを設定することで、Ubuntu WSへ踏み台VPSを経由した認証を行う。~/.ssh/configに以下を追記。

~/.ssh/config
Host Fumidai-VPS
  HostName       xxx.xxx.xxx.xxx
  IdentityFile   ~/.ssh/id_ecdsa_fumidai_vps ← 踏み台VPSでの公開鍵認証のための秘密鍵指定
  Port           50022
  User          user_vps                    ← 踏み台VPSのSSHユーザ

Host rssh
  ProxyCommand   ssh -W %h:%p Fumidai-VPS
  HostName       localhost
  IdentityFile   ~/.ssh/id_ecdsa_ubuntu_ws   ← Ubuntu WSでの公開鍵認証のための秘密鍵指定
  Port           2222
  DynamicForward 2222
  User           user_ws                     ← UbuntuWSのSSHユーザ

ここで、user_vpsuser_ws、Reverse SSHを張っているユーザrsshと異なっていても問題ない。

ここまで来れば以下のコマンドで接続可能なはず。

shell
$ ssh rssh

参考

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3