環境
- Windows10home上のDockerコンテナを利用します
- DockerHUBからtsl0922/ttydを使わせて頂きます
- 192.168.1.120にsshでアクセスできる端末を用意しました
起動テスト
dockerを使って環境を作ります。
> docker run --rm -it -p 3000:3000 tsl0922/ttyd ttyd -p 3000 -a /bin/bash
上記を実行したのち、ウェブブラウザで、http://localhost:3000/ にアクセスすると、ウェブブラウザの表示がターミナルになり、上記で起動したdockerのOSに /bin/bash を使ってログインした状態になります。
root@a1356431acf0:~# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:12 pts/0 00:00:00 /usr/bin/tini -- ttyd -p 3000 -a /bin/bash
root 7 1 0 13:12 pts/0 00:00:00 ttyd -p 3000 -a /bin/bash
root 8 7 0 13:12 pts/1 00:00:00 /bin/bash
root 12 8 0 13:15 pts/1 00:00:00 ps -ef
リモートのホストへログイン
次にブラウザでログインしたいサーバのIPアドレスをクエリパラメータとして渡してsshでリモートのホストにログインできるようにしてみます。それには、このdockerイメージにsshコマンドをインストールする必要があるので、Dockerfileを作って新しいdocker imageを生成しそれを使います。
パラメータを実行プログラムに渡すには「-a」オプションを付ける必要があります。ttydへはport 3000番で繋がるようにします。
FROM tsl0922/ttyd:latest
RUN apt update -y
RUN apt install openssh-client -y
RUN echo "#!/bin/bash" > /root/ssh.sh
RUN echo >> /root/ssh.sh
RUN echo '/usr/bin/ssh -l $1 $2' >> /root/ssh.sh
RUN chmod +x /root/ssh.sh
EXPOSE 3000
ENTRYPOINT ["/usr/bin/ttyd", "-p 3000", "-a", "/root/ssh.sh"]
上記内容を Dockerfile というファイル名で保存してください。
※セキュリティ的に非常にまずい例ですが、与えられたアカウント名を$1、接続先IPを$2で受け取ってsshの引数にして実行します。
作成したDockerfileをbuildしてimageを作成します。
> docker build -t ttyd:0.1 .
作成したイメージを確認します。
> docker images | Select-String ttyd
ttyd 0.1 7cd138f3f6fe About a minute ago 133MB
作成したコンテナを起動します。
> docker run --rm -d -p 3000:3000 ttyd:0.1
また /root/ssh.sh に値を渡すためのパラメータは以下の通りargを指定します。
http://localhost:3000/?arg=sakana&arg=192.168.1.120
上記のURLでウェブブラウザを用いてアクセスすると192.168.1.120というホストにsakanaというアカウントでssh接続しパスワードを聞かれた状態の画面が出力されていると思います。
試す場合はご自身の環境に合わせて値を変更してみてください。