この記事は 「Robot Framework Advent Calendar 2017 - Qiita」 の21日目の記事です。
Robot Frameworkでは、 SSHLibrary
を使ってSSHのテストができます。
そこで今回、SSHLibraryを試してみました。
目次
環境
- Python 2.7.14
- SSHLibraryがPython3系に対応していないため
- Robot Framework 3.0.2
- SSHLibrary 2.1.3
SSHサーバの用意
SSHLibraryはSSHクライアントなので、SSHサーバを別途用意する必要があります。
今回はSSHサーバをDocker (Ubunt 16.04ベース) で作成します。
なお、Dockerfileの内容は、Dockerのドキュメントにあったものをそのまま使います。
Dockerize an SSH service | Docker Documentation
また、公開鍵認証も試すため、以下を参考にDockerfileや公開鍵を準備します。
Docker | 公開鍵を使ってサーバーにssh接続する ( コンテナに公開鍵をコピーする場合 ) - Qiita
まずは公開鍵を準備します。
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_sshlibrary_sample
Dockerコンテナに公開鍵を転送するため、作成した公開鍵( id_rsa_sshlibrary_sample.pub
) を、Dockerfileと同じディレクトリに入れておきます。
Dockerfileは以下の通りです。
FROM ubuntu:16.04 RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:screencast' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile # ローカルで生成した公開鍵をコンテナへ転送 COPY id_rsa_sshlibrary_sample.pub /root/authorized_keys # ディレクトリ作成、キーの移動、パーミッションの変更 CMD mkdir ~/.ssh && \ mv ~/authorized_keys ~/.ssh/authorized_keys && \ chmod 0600 ~/.ssh/authorized_keys EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
ビルド後、起動しておきます。
# ビルド $ docker build -t eg_sshd . # 起動:Dockerのポート22はMacの12345ポートへと転送 $ docker run -d -p 12345:22 --name test_sshd eg_sshd
なお、このテスト終了後は削除を忘れずに行います。
$ docker stop test_sshd $ docker rm test_sshd $ docker rmi eg_sshd
SSHLibraryの実行
インストール
pipでインストールします。
なお、以下のissueにある通り、まだPython3系では動かないことに注意します。
- Python 3 support · Issue #144 · robotframework/SSHLibrary
- Pip3 (python3) and 'python3 setup.py install' of SSHLibrary on ubuntu failed with 'execfile' issue · Issue #194 · robotframework/SSHLibrary
# バージョン確認 $ python --version Python 2.7.14 # pipでインストール pip install robotframework-sshlibrary
テストケースの作成
今回はパスワード認証と公開鍵認証の2つでSSH接続してみます。
*** Settings *** Library SSHLibrary *** Variables *** ${user} root ${password} screencast *** Test Cases *** パスワードでログインしてhelloする Open Connection localhost port=12345 Login root screencast ${output} = Execute Command echo Hello SSHLibrary with password! Log To Console ${\n}${output} Should Be Equal ${output} Hello SSHLibrary with password! Close All Connections 公開鍵でログインしてhelloする Open Connection localhost port=12345 # 鍵は秘密鍵を指定する Login With Public Key root id_rsa_sshlibrary_sample screencast ${output} = Execute Command echo Hello SSHLibrary with public key! Log To Console ${\n}${output} Should Be Equal ${output} Hello SSHLibrary with public key! Close All Connections
テストの実行
両方のテストがパスしました。
$ robot test_ssh.robot =========================== Test Ssh =========================== パスワードでログインしてhelloする ... Hello SSHLibrary with password! パスワードでログインしてhelloする | PASS | ------------------------------------- 公開鍵でログインしてhelloする ... Hello SSHLibrary with public key! 公開鍵でログインしてhelloする | PASS | ------------------------------------- Test Ssh | PASS | 2 critical tests, 2 passed, 0 failed 2 tests total, 2 passed, 0 failed
ソースコード
GitHubに上げました。ssh_library_sample
ディレクリの中が今回のものです。
thinkAmi-sandbox/RobotFramework-sample: Robot Framewrok samples