Armadillo Base OS搭載製品で、コンテナに直接SSHでログインする方法を紹介します。
注意点として、コンテナ内にSSHのホスト鍵を保存すると他のArmadilloと共通の鍵になってしまう為、
コンテナ外に作成されるホスト鍵を使用する方法を説明します。
実施手順
下記の手順で実施します。
1.VScodeでプロジェクトを作成
2.app.confを編集
3.Dockerfileを編集
4.packages.txtを編集
5.main.shを編集
6.イメージビルド~SWUインストール
7.SSH接続確認
8.Armadillo Base OS側のSSH無効化処理(任意)
・以下、ATDE環境を構築済みかつ、VScodeにArmadillo Base OS Development Environmentを
インストール済みとして説明します。未実施の方は製品マニュアルを参照下さい。
・また、Armadillo内に使用しないコンテナがある場合には事前にコンテナを削除しておきます。
製品マニュアルのGenerate Container Clear Swuの説明を参照下さい。
1.VScodeでプロジェクトを作成
本ブログではシェルプロジェクトで作成します。
VScodeを立ち上げ、下記手順で新規にプロジェクトを作成します。プロジェクト名は任意ですが、
本ブログでは任意のディレクトリ(vscode_pj)の下に sshd_alpine を作成します。
※製品(A600,A6E,G4/X2)は適宜使用する製品に合わせて選択下さい。
※プロジェクト名を決めると、右下に作成したプロジェクトを①別ウインドウで開くか、
②同じウインドウで開くかを聞かれますが、どちらでも問題ありません。
元のプロジェクトを残しておく場合は①、そうでない場合は②を選ぶと良いと思います。
2.app.confを編集
下図の様にapp.confを選択し、下記の様に編集します。
app.conf
set_image localhost/{{PROJECT}}:latest
add_volumes {{PROJECT}}:/vol_app
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data
set_command bash /vol_app/src/main.sh
#add
add_ports 50022:22
add_volumes /etc/ssh:/etc/ssh_key
上記の様にapp.confを修正後、Ctrl+S で保存して閉じます。
《補足》
・add_ports 50022:22
ポートフォワーディング設定で、Armadilloのポート50022にアクセスすると
コンテナの22にアクセス出来ます。
・add_volumes /etc/ssh:/etc/ssh_key
Armadillo Base OSの/etc/ssh(sshのコンフィグや鍵を格納)にコンテナ内の
/etc/ssh_keyでマウントします。(/etc/sshにある鍵を使用する)
3.Dockerfileを編集
app.confと同様にDockerfileを選択し、下記の様に編集します。
Dockerfile
#ここでは例としてAlpineのコンテナイメージを使用
ARG ARCH
FROM docker.io/${ARCH}/alpine:latest
#Alpineのパッケージを使用
ARG PACKAGES
RUN apk update && apk upgrade \
&& apk add ${PACKAGES} \
&& apk cache clean
#ユーザー"ssh_user"(ユーザー名は任意)を追加
#パスワードを"test"に指定
RUN adduser ssh_user --disabled-password \
&& echo ssh_user:test | chpasswd
#sshd_configの編集:ここではrsa_keyを使用する例(#を消す)
#defaultの/etc/ssh/*_keyを/etc/ssh_key/*_keyに変更(コンテナ外の鍵を使用する為)
RUN sed -i -e "s/#HostKey \/etc\/ssh\/ssh_host_rsa_key/HostKey \/etc\/ssh_key\/ssh_host_rsa_key/g" /etc/ssh/sshd_config
#authorized_keysを使用する場合はユーザー追加後に/home/ssh_user/.ssh/authorized_keysに鍵をコピーする
#あらかじめresouces//home/ssh_user/.ssh/authorized_keysに配置しておく
ARG PRODUCT
COPY resources [r]esources_${PRODUCT} /
Dockerfileを修正後、Ctrl+S で保存して閉じます。
4.packages.txtを編集
packages.txtを開き、opensshを追記します。
packages.txt
bash
openssh
修正後、Ctrl+S で保存して閉じます。
5.main.shを編集
main.shを開き、下記の様に編集します。
main.sh
#!/bin/bash -e
#sshd start
/usr/sbin/sshd
#以下にメインスクリプトを記載します。
#ここでは特に何もしない為 sleep としています。
sleep infinity
編集後、main.shをCtrl+S で保存して閉じます。
6.イメージビルド~SWUインストール
下記の様に Generate Development Swu を実行してコンテナをビルドし、SWUファイルを作成します。
作成されたSWUファイルをUSBメモリ経由やABOS Web経由でArmadilloにインストールします。
《補足》
Generate Development Swu でSWUファイルを作成すると、Armadillo Base OS側のsshdも有効化され、
/etc/sshにホスト鍵も作成されます。コンテナのホスト鍵は今回はこの鍵を使用する為、コンテナの
/etc/ssh_keyで/etc/sshをマウントしています。
7.SSH接続確認
SWUファイルのインストールが完了するとArmadilloが自動で再起動します。
再起動するとコンテナが自動起動し、main.shを実行します。
コンテナ動作中はsshdが有効化されている為、sshでログインできます。
ポートフォワーディング設定したコンテナのポートを指定してsshで接続
[PC]$ ssh -p 50022 ssh_user@aaa.bbb.ccc.ddd //aaa.bbb.ccc.dddはArmadilloのIPアドレス
8.Armadillo Base OS側のSSH無効化処理(任意)
コンテナへのSSH接続のみを許可する場合は、Armadilloのコンソールで下記を実行する事で
Armadillo Base OS側のsshdを無効化する事が出来ます。
[Armadillo]# rc-service sshd stop //sshdサービスを停止
[Armadillo]# rc-update delete sshd //sshdをサービスから消去
[Armadillo]# persist_file -d /etc/runlevels/default/sshd //実行スクリプトを消去
参考情報
Armadilloを製品化する場合に現在の状態のクローンを作成するインストールディスクを作成する事が出来ます。
ただし、sshの鍵もコピーされてしまう為、製品化時は鍵を後で作成する方法を紹介しています。
下記ブログを参考にして頂ければと思います。
量産時にSSHの鍵を生成する方法(インストールディスク編)