電波ビーチ

☆(ゝω・)v

Dockerにmacからssh接続

めちゃくちゃハマったので。。

ゴール

Debian on Docker for macで、パスワード認証を禁止したコンテナにローカルからssh公開鍵認証で入る。

ホントはrootログイン禁止ってのも条件にしたかったのですが、Dockerの仕様なのかなんなのかわかりませんがなぜかまったく一般ユーザにsshでログインできず諦めました。

ホスト(Docker)側

コンテナを作るところからやっていきます。コツは

  • ポートフォワーディング用の番号をlocalhost:ローカルのポート:ホストのポートでちゃんと割り振る
  • adduserでユーザをつくりsudo権限を与えておく
  • sshdはしっかりと起動させておく

最初のやつで丸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

-pmacの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 statussshdの状態が分かります。起動してなかったら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への登録

なんかエラーが出たんでググったやつをやりました

qiita.com

qiita.com

テスト

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:~# 

イケてますね!