LoginSignup
2
4

More than 3 years have passed since last update.

Pythonista3 for iphoneを使って簡単ssh port fowarding

Last updated at Posted at 2019-06-25

用意するもの

  • sshサーバー
  • iphone
  • Pythonista3(IOS)

鍵の準備

RSA暗号で秘密鍵と公開鍵を作成します。Ed25519は非対応なので必ずRSA暗号で鍵を作ってください!!PythonistaにStaShが入っていない場合はインストールして下さい。StaShで次のコマンドを実行します。

$ ssh-keygen -t rsa -b 4096

"~/.ssh/"にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が生成されるはずです。作れたら公開鍵をsshサーバーに追加しておいて下さい。

sshtunnelのインストール

Pythonで作成されたsshtunnelというPort Fowardingが簡単にできるモジュールがあります。StaShで次のコマンドを実行してインストールします。

$ pip install sshtunnel

ここで、sshtunnelを少し修正します。sshtunnelはparamikoというモジュールに依存しているのですが、バージョンの食い違いでそのまま使うとエラーが出ます。PythonistaメニューのPython Modulesからsshtunnel.pyを探し出して次のように修正します。

1021> if host_pkey_directories is not None:
1022>   paramiko_key_types = {'rsa': paramiko.RSAKey,
1023> 'dsa': paramiko.DSSKey,
1024>-'ecdsa': paramiko.ECDSAKey,
1025>-'ed25519': paramiko.Ed25519Key}
1024>+'ecdsa': paramiko.ECDSAKey}

...

1215> for pkey_class in (key_type,) if key_type else (
1216>   paramiko.RSAKey,
1217>   paramiko.DSSKey,
1218>-  paramiko.ECDSAKey,
1219>-  paramiko.Ed25519Key
1218>+  paramiko.ECDSAKey
1220> ):

-の行を消して+の行を追加して下さい。

プログラムの作成

sshtunnelを使ってポート転送するプログラムを書きます。

from sshtunnel import SSHTunnelForwarder

server = SSHTunnelForwarder(
    ('sshサーバーアドレス', sshサーバーポート),
    ssh_username='ユーザー名',
    ssh_pkey='秘密鍵の場所',
    remote_bind_address=('リモート側アドレス', リモート側ポート),
    local_bind_address=('ローカル側アドレス', ローカル側ポート)
)

server.start()
input()
server.stop()

例えば次のように作成します。

from sshtunnel import SSHTunnelForwarder

server = SSHTunnelForwarder(
    ('server_ip', 22),
    ssh_username='user',
    ssh_pkey='~/.ssh/id_rsa',
    remote_bind_address=('127.0.0.1', 8000),
    local_bind_address=('127.0.0.1', 8000)
)

server.start()
input()
server.stop()

適当な場所にこのコードを作成して実行すればポート転送出来ます(iphoneの仕様上、バックグラウンドで動作するのは10分間だそうです)。Pythonistaは作成したプログラムのショートカットをホーム画面に追加する機能があります。作成しておけばワンクリックで実行できます。

2
4
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
2
4