今日帰る前に tsurubee3 と、SSHのコネクションアレコレできたら楽しそうじゃんみたいな話をしていて、gliderlabs/sshを利用したら割とシュッとできたので紹介します。
gliderlabs/ssh
はSSHの認証や各ステップをミドルウェアパターンで拡張できるSSHサーバのライブラリです。今回は、このライブラリを利用して、SSHのパスワード認証をコンテキストに保持して使いまわしたり、PTYの入力を標準出力にパイプする実装を書いてみました。
動作としてはこんな感じ。
サーバ側
% make server ==> Installing Dependencies go get -u github.com/golang/dep/... dep ensure go run main.go
クライアント側
% ssh localhost -p2222 yamashitakazuhiko@localhost's password:
パスワードは test
にしておるので、入力した段階で、contextに保存され、サーバ側で下記のように表示されます。
user password: test
あとは、クライアント側でタイプした内容が次々と標準出力に出る感じです。
user password: testpyama saikou
改行してないからあれな感じになっちゃいましたね・・・。
Golang、標準ライブラリやそれを利用したミドルウェア実装が豊富で、アイディアさえれば何でも出来ちゃう状況にあるので、こういうおもしろハックを突き詰めていくと事業を差別化する技術シュッと作れそうで便利な世の中になったなぁと思いました。
ただこの実装だとSCPがカバーできてないのと、SCPのGolang実装あまりなさそうだから、RFP読むなり、sshd読むなりして実装すると楽しそう。