スマホから家PCにsshしたい


背景

ふとスマホ(android)から家PCにsshしたいと思った。
スマホから家PCをいじることができれば、外出先でもリッチな環境でちょっとした開発作業ができるのではないか。と。

試したこと①直接接続

まずはスマホ→家PCに直接sshを試みてみた。とりあえずググって出てきた情報を参考に色々設定を進めていったのだが壁にぶつかった。
当方IPv6プラスの通信環境でIODATAのルーターを使っているのだが、いろいろ調査したのだけれども外からアクセスがあったときにPCのローカルIPへ中継する設定ができなかった。ルーターのIPv6設定画面にポートを設定する項目が無い。もしかしたらルーターによってはできるのかもしれないが、この辺りはよく分からん。

結局、直接接続するのは諦めて、別の方法を模索した。
調べているとどうやらポートフォワーディングというのが使えるらしい。

試したこと②ポートフォワーディング

詳しい説明は他に譲るとして、要はポートフォワーディングをすることで外部から来た特定のポート番号宛のパケットを家PCへ転送することができる。これを利用すれば踏み台PCを用意して間接的に家PCにsshできる。実現するにはスマホと家PCからssh可能なPCが必要なのだけれど、これはGCP(GCE)を利用すればいける。しかもスペックを絞れば無料で運用可能。

準備

  • GCP(GCE)の準備をする。 無料で利用できる構成でインスタンスを立てる。
  • スマホにTermux(あるいは他のLinuxエミュレーターやsshクライアント)を入れてGCPにsshできるようにする。
  • 家PCからGCPにsshできるようにする。

step1:

家PCからGCPにsshのトンネルを張る。具体的には次のことをする。
家PCに次のsshのconfigファイルがあったとして、

Host gcp
        HostName XXX.XXX.XXX.XXX
        User gcpuser
        IdentityFile ~/.ssh/gcpkey
        Port 11111
        TCPKeepAlive yes
        IdentitiesOnly yes

sshコマンド打つときに次のオプションを付ける。

ssh -R 22222:localhost:33333 gcp  

これでGCP上のlocalhost:22222に来た通信を家PC(YYY.YYY.YYY.YYY:33333)に飛ばせるようになった。

step2:

スマホからGCP(XXX.XXX.XXX.XXX:11111)にssh。
そしたらそのままlocalhost:22222に向けてssh。。。で完了!
これでスマホから家PCにsshすることが出来た。

備考

快適にキー入力できた方が良いので、Bluetooth接続のキーボードとこのアプリもあった方がいい。Ctrl+CでコピーなどPCと遜色ないキーボード操作ができるようになる。多分iphoneにも似たようなのがある。

問題

GCEの実体がアメリカにあるせいか挙動がラグい。スマホ→アメリカ→家PC→アメリカ→スマホ
の経路を辿るので文字入力したあと0.5秒経過くらいで画面に反映される。
使えないことはないがまぁまぁストレスなのでなにかしらの対策が必要かも。

最後に

もっと良い方法あったら教えてね。