lp6m’s blog

いろいろかきます

家のGPUマシンにVPSとポートフォワーディングを使用してリモートアクセス + リモート上のdockerコンテナにVSCodeでアタッチ

家のGPUマシンに外からアクセスしたい。家のGPUマシン上のdockerコンテナにアタッチしたい。
難しい設定はしたくない。備忘録。

環境

  • GPUマシン:ubuntu18.04
  • さくらVPS: ubuntu16.04 512MBの一番安いプランをレンタル中(VPSへのssh環境は既にセットアップ済み)
  • リモートマシン: ubuntu18.04

ポートフォワーディングの設定

とりあえず家のGPUマシンにssh接続できるようにする。参考リンクを参考にすればできる。

ネットワークの知識がホットミルクの膜くらい薄い僕が、リモートアクセスしたという話|森田 拓朗|note
SSHポートフォワード(トンネリング)を使って、遠隔地からLAN内のコンピュータにログインする - 2014-09-12 - ククログ
VPSを経由して安全に自宅サーバを公開する - Qiita

VPS側の設定

/etc/sshd_configに以下を追記。

GatewayPorts: yes

GPUマシン(リモート)側で以下を実行

vps_usernameはVPS上のubuntuユーザ名、vps_addressはVPSグローバルIP、192.168.xx.yyはGPUマシンのローカルIPを設定する。

ssh <vps_username>@<vps_address>-R 10022:192.168.xx.yy:22

ssh接続はしばらくするとタイムアウトするので適宜設定する。めんどくさかったらtopを実行しておけば切れない。
vpssshポートがデフォルトじゃない場合は適宜修正。

リモート側からアクセス

ssh <vps_username>@<vps_address> 
ssh <gpu_username>@localhost -p 10022

これでアクセスできる!

面倒くさいのでssh_configを設定しておく

~/.ssh/config に以下を追記。

Host           sakuravps
HostName       <vps_address>
User           <vps_username>

Host           tokyogpu
HostName       localhost
Port           10022
User           <gpu_username>
ProxyCommand   ssh -CW %h:%p sakuravps

これでssh tokyogpuでログインできるようになる。VSCodeでもssh接続でリモートアクセスできる。

dockerコンテナへアタッチ

VSCodeのremote developmentでdockerコンテナにアタッチしたいが、ポートフォワーディングしているせいか?うまくできなかった。
単純にsshしているリモートマシンで動作しているdockerコンテナへのアタッチは特に何の設定もせずにできるが、よくわからなかったので以下の方法を参考にした。
※ローカルマシン側にdocker環境をいれておかないとそもそもVSCodeのdocker remote developmentが使えないのでいれておく。

リモートサーバーの中のDockerにローカルから接続する - Eospedia

ssh -fNL localhost:23750:/var/run/docker.sock <gpu_username>@tokyogpu
export DOCKER_HOST=localhost:23750
code

とりあえずこれで直接アタッチできるようになった。
よくわからなかった部分をいつか理解したいが・・