databricksruntime/gpu-pytorchを用いたDockerクラスターへのssh接続

こちらのDockerイメージを用いることで、GPUのクラスターを構成できます。

https://hub.docker.com/r/databricksruntime/gpu-pytorch

しかし、sshで接続しようとすると、なぜかユーザー`ubuntu`へのパスワードを聞かれることに。公開キーも秘密キーも指定しているんですけどね。

```sh
takaaki.yayoi@xxxxxx ~ % ssh ubuntu@4.241.85.216 -p 2200 -i /Users/takaaki.yayoi/.ssh/id_rsa
The authenticity of host '[4.241.85.216]:2200 ([4.241.85.216]:2200)' can't be established.
ED25519 key fingerprint is xxx
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[4.241.85.216]:2200' (ED25519) to the list of known hosts.
ubuntu@4.241.85.216's password: 
```

こちらの設定は完了していますので、[standardのイメージ](https://hub.docker.com/r/databricksruntime/standard)だと問題なく接続できます。

https://qiita.com/taka_yayoi/items/dbb68eaad39dcaf3a1b0

色々確認してたら、そもそも**ssh接続に使っているユーザーubuntuが作成されているのか？** と思い当たりました。

クラスター起動後にノートブックで以下を実行。

```sh
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
libraries:x:1000:1000::/home/libraries:/bin/sh
```

**ubuntu**がいない...。

[こちら](https://github.com/databricks/containers/tree/master/ubuntu/ssh)にもユーザー追加しろとあります。`standard`の場合はDockerfileで[ユーザー追加処理](https://github.com/databricks/containers/blob/master/ubuntu/standard/Dockerfile)が記載されていましたが、GPU系は(確認した限り)無い様子。

> Adding the ssh user. In this example, we use `ubuntu`, but you can customize this

なので、まずはノートブックで動作確認します。ユーザー`ubuntu`を追加します。

```sh
%sh
useradd --create-home --shell /bin/bash --groups sudo ubuntu
```

```sh
%sh
cat /etc/passwd
```
```
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
libraries:x:1000:1000::/home/libraries:/bin/sh
ubuntu:x:1001:1001::/home/ubuntu:/bin/bash
```

**ubuntu**が作成されています。

手動で、sshサーバーをインストール・起動します。

```sh
%sh
apt-get install --yes openssh-server
service ssh restart
```

これでssh接続して見ます。

```sh
takaaki.yayoi@xxxxx ~ % ssh ubuntu@172.207.163.54 -p 2200 -i /Users/takaaki.yayoi/.ssh/id_rsa
The authenticity of host '[172.207.163.54]:2200 ([172.207.163.54]:2200)' can't be established.
ED25519 key fingerprint is xxxx
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[172.207.163.54]:2200' (ED25519) to the list of known hosts.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-1067-azure x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
:
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@0910-083250-wgwjxjw7-10-0-0-132:~$
```

いけました。

[以前作成したDockerfile](https://qiita.com/taka_yayoi/items/dbb68eaad39dcaf3a1b0)にユーザー作成を追加します。ベースイメージもGPUのものに変更しています。

```dockerfile
FROM databricksruntime/gpu-pytorch:cuda11.8
RUN apt-get update \
  && apt-get install --yes openssh-server \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN useradd --create-home --shell /bin/bash --groups sudo ubuntu

ENTRYPOINT service ssh restart && bash
```

コンテナレジストリにプッシュします。

```sh
docker build -t <レジストリ名>/gpu-pytorch-ssh:cuda11.8 .
docker push <レジストリ名>/gpu-pytorch-ssh:cuda11.8
```

SSHの公開鍵を指定し、このイメージを使うようにします。
![Screenshot 2024-09-17 at 15.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d17b4dd0-9841-aa8d-db73-dc1814b4cbb8.png)
![Screenshot 2024-09-17 at 15.24.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/de9adb15-e799-5b2d-9de9-df807de849da.png)

こちらも動作確認できました。
![Screenshot 2024-09-17 at 15.34.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2eeb973e-d4ad-7a28-74e5-f7a13f05f353.png)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)