LoginSignup
27
31

More than 3 years have passed since last update.

autosshとsshポートフォワードでルータ内のマシンにアクセスする

Last updated at Posted at 2015-10-08

閉じたネットワークのAndroidにsshでアクセスしたい

仕事はAndroidを使ってフォトブースを作ってます。
物理的に(600kmも)遠く離れたところにあるフォトブースをなんとか管理しなければならないのです。
困ったことにフォトブースで使っているモバイルルータは外部からアクセスができません。
モバイルルータなので、固定IPなんてものもありません。

network1.png

ubuntuからサーバーにautosshでポートフォワードする

サーバ経由でsshをできるようにするには、sshコマンドで次のようにできます。

(ubuntu上で実行)
$ ssh www.server.com -R 13334:192.168.80.100:3334

でもsshコマンドだとネットワークが切れた時にアクセスできなくなるので、autosshコマンドを使います。

(ubuntu上で実行)
$ autossh photobooth@www.server.com -M 0 -C -N -f -R 13334:192.168.80.100:3334

これで一度サーバーにログインして、13334ポートにssh接続すれば、ルータ内にあるandroidにアクセスできるわけです。

(サーバー上で実行)
$ ssh -p 13334 admin@localhost

network2.png

いや、そもそもターゲット(今回の例ではAndroid)でautosshが動けば、それでOKなのですが、なんせAndroidなので、そんなコマンドは使えません。

もう一つsshポートフォワード

上記までだと、一度サーバにログインしなければならないので面倒です。
そこでlocalからserverでもsshポートフォワードをすることにします。
サーバー上では同じ13334ポートを指定しているので、localからのsshコマンドはそのままandroidまで転送されます。

(local上で実行)
$ ssh -L 3334:localhost:13334 -f -N maintenance@www.server.com

network3.png

最後はlocal上でsshをすればOKです。
androidに直接ログインしているように扱えます。

(local上で実行)
$ ssh -p 3334 admin@localhost

もちろんscpだって同じように使えます。

(local上で実行)
$ scp -P 3334 targetFile admin@localhost:/sdcard/

参考

ForwardAgentを使う

SSHコマンドでForwardAgentという機能を使うと、今回説明したような多段接続の際に便利です。
ForwardAgentとは、簡単にいえば、ssh-agentがインストールされて動いていれば、一度接続したことのあるマシンの場合に再度キーを指定しないで接続してくれます。
しかも多段接続の場合でも動いてくれます。

例えば、一度ログインしたことのあるマシンから、以下のようにすれば入れるはず。

$ ssh -A maintenance@www.server.com

多段接続の場合は -tオプションも併用してできます。

$ ssh -A maintenance@www.server.com -t ssh -p 13334 admin@localhost

ForwardAgentについてはssh-agentの基本を参照してください。

27
31
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
27
31