node.js用のsshライブラリ(のラッパーライブラリ)を開発していて、こちらの方と全く同じ問題にぶつかりました。
こちらの記事では、travisCIのテストが動いている環境でsshdを立ててアクセスしていますが、ローカルのテストで使いまわす時のことを考えて、dockerでsshdを立ち上げてそちらへアクセスするようにしてみました。
travisCIのテスト中にdockerを使う方法についてはこちら
このドキュメントでは、dockerhubに公開されたイメージをbuildする前提で書かれていますが、Dockerfileをテスト対象コードのリポジトリに含めてそれを使う方針でやります。
まず、次のようなDockerfileを用意します。ここではcentOSのオフィシャルイメージを使っていますが、その辺はお好みで。
FROM centos:centos7 EXPOSE 22 # install sshd package RUN yum -y install openssh-server initscripts # generate hostkey RUN /usr/sbin/sshd-keygen # add non-root user and set password RUN adduser testuser && echo "passw0rd" | passwd --stdin testuser RUN mkdir -p /home/testuser/.ssh && chown testuser:testuser /home/testuser/.ssh CMD ["/usr/sbin/sshd", "-D"]
続いて、.travis.ymlに次の記述を追加します。
services: - docker before_script: - docker build -t sshd ./test - docker run -p 4567:22 -d sshd
docker buildの行で./testと書いているところは、実際にはDockerfileを配置したディレクトリを指定します。あと最後のdocker runの時に-d
をつけてバックグラウンドに回すのをお忘れなく。