Engineering Note

プログラミングなどの技術的なメモ

2.7.1 Paramikoを用いたSSH通信プログラムの作成 (サイバーセキュリティプログラミング Pythonで学ぶハッカーの思考)

本記事は、オライリージャパンから発行されている「サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考(原題:Black Hat Python)」の学習メモとして、書籍ではPython2で書かれていますが、自分なりに解釈した上でPython3に書き直しをしています。

今回は、PythonのParamikoというパッケージを用いた簡単なSSHクライアントの実装について学んでいきます。

 

 

Paramikoとは

Paramikoは、SSHバージョン2を実装したPyCryptoを用いたライブラリです。

由来はエスペラント語の"paranoid"と"friend"を合わせたものだそうで、現在ではPython3系でもpipコマンドで簡単にインストールすることができます。

以下がドキュメントになります。

Welcome to Paramiko! — Paramiko documentation

 

SSHクライアントの実装

まずは簡単なSSHクライアントを作成してみます。

 

# bh_sshcmd.py
import paramiko

def ssh_command(ip, user, passwd, command):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(ip, username=user, password=passwd, port=22)
    ssh_session = client.get_transport().open_session()
    if ssh_session.active:
        ssh_session.exec_command(command)
        print(ssh_session.recv(1024))
    return

ssh_command('192.168.0.1', 'ubuntu', 'password', 'cat /etc/lsb-release')

 

上記では、接続先のIP、ホスト名、パスワードおよび実行するコマンドを渡して、コマンドを実行したらその結果を表示するだけとなります。

 

SSHサーバに接続してみる

ローカルで起動したUbuntuSSHサーバにアクセスし、"cat /etc/lsb-release"を実行してみます。

 

 > python bh_sshcmd.py
 b'DISTRIB_ID=Ubuntu\nDISTRIB_RELEASE=14.04\nDISTRIB_CODENAME=trusty\nDISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"\n'

 

最後に

今回は簡単なSSHクライアントをPythonのParamikoを使って実装してみました。

次回はもう少し実用的なSSHサーバおよびSSHクライアントの実装について学んでいきます。

 

参考書籍

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考