本記事は、オライリージャパンから発行されている「サイバーセキュリティプログラミング ―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サーバに接続してみる
ローカルで起動したUbuntuのSSHサーバにアクセスし、"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クライアントの実装について学んでいきます。