めちゃくちゃハマったので。。
ゴール
Debian on Docker for macで、パスワード認証を禁止したコンテナにローカルからssh公開鍵認証で入る。
ホントはrootログイン禁止ってのも条件にしたかったのですが、Dockerの仕様なのかなんなのかわかりませんがなぜかまったく一般ユーザにsshでログインできず諦めました。
ホスト(Docker)側
コンテナを作るところからやっていきます。コツは
最初のやつで丸2日以上溶かした。。。
ハマりどころ
上に関して。macだとdocker0
なるネットワークインターフェースが存在せずクライアント(mac)側からはpingすら通りません。そのためコンテナ作成時にポートを指定してやる必要があるらしいです。そもそもDockerをVirtualBox経由で使うのが多いらしく、直接macから動かしている記事がほとんど見当たらず。あったとしても、ポート指定するときの書式はdocker run -p <ローカルのポート番号>:<ホストのポート番号>
みたいなのでやっているものばかりで、これがわたしの環境だと駄目でした。ローカルのアドレスもつけて
<localhost>:<ローカルのポート番号>:<ホストのポート番号>
でやってやることで接続できました。
コンテナ作成
docker run --name ssh_test -it -p 127.0.0.1:1234:5678 debian
-p
でmacの1234番とDockerコンテナの5678番を紐付けてます。22番はデフォルト値で侵入者に狙われやすいため変えるのがセキュリティ的に定番らしいのでそうします
各種ツールいれる
apt update
なにはともあれ真っ先にこれしましょう。
sudo
root以外のユーザを使うので必須
ssh
sshするので必須
vim
sshd_configをいじるので必須
とりあえずテストでパスワード認証でrootに入ってみる
そのための設定として以下をやります
/etc/ssh/sshd_configをいじる
Port 5678 PermitRootLogin yes PasswordAuthentication yes
に変えてやります。他の設定はとりあえずいじらない
sshdを起動
service ssh status
でsshdの状態が分かります。起動してなかったらservice ssh start
してやります。起動しててもsshd_configをいじったあとなら再起動service ssh restart
してやります
root@d21a7d87348c:/# service ssh status [FAIL] sshd is not running ... failed! root@d21a7d87348c:/# service ssh start [ ok ] Starting OpenBSD Secure Shell server: sshd. root@d21a7d87348c:/# service ssh status [ ok ] sshd is running.
パスワード設定
passwd
で適当に設定してやります。DockerでDebianを作ったときのデフォルトパスワードがわからんかったので。
ローカルからsshしてみる
ssh -p 1234 root@127.0.0.1 root@127.0.0.1's password: Linux d21a7d87348c 4.9.60-linuxkit-aufs #1 SMP Mon Nov 6 16:00:12 UTC 2017 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@d21a7d87348c:~#
入ってますね!最初にログインするとなんかもっといろいろ表示されると思います。
ちなみに出るときはexit
で。DockerじゃないのでCtrl+p+q
しても無駄です
root@d21a7d87348c:~# exit logout Connection to 127.0.0.1 closed.
sshでrootに接続してみる
次は公開鍵による接続を試します。
秘密鍵/公開鍵のペアを作る(mac側)
ググればたくさん出ますがふつうにkey-gen
しました
コンテナに公開鍵を送る
scp
コマンドを使うのが常套手段っぽいのですが、ssh-copy-id
たらいうので簡単にできるらしいので導入しました
ssh-copy-id -p 1234 -i ~/.ssh/<keyname>.pub root@localhost
これでコンテナの~/.ssh/authorized_keys
に公開鍵を入れることができたようです。
sshd_configをいじる
パスワード認証を禁止して公開鍵による認証のみを受け付けるようにします。
PubkeyAuthentication yes PasswordAuthentication no
パーミッションの変更/ssh-addへの登録
なんかエラーが出たんでググったやつをやりました
テスト
ssh -p 1234 root@localhost Linux 7b701924f1da 4.9.60-linuxkit-aufs #1 SMP Mon Nov 6 16:00:12 UTC 2017 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Mar 18 02:42:11 2018 from 172.17.0.1 root@7b701924f1da:~#
イケてますね!