このリポジトリはSSH認証の演習を行うためのDocker環境です。パスワード認証と公開鍵認証の両方を学習することができます。
Warning
Host側はWSLでは動作しません!Linux環境での実行を推奨します。
この演習環境では、各学生に以下の2つのユーザーアカウントが提供されます:
- パスワード認証用ユーザー (
[学籍番号]pass
): パスワード認証でSSH接続可能 - 公開鍵認証用ユーザー (
[学籍番号]key
): 公開鍵認証のみでSSH接続可能
- Docker
- Docker Compose
-
リポジトリをクローンします:
git clone https://github.com/kano-lab/dpp-ssh-practice.git cd dpp-ssh-practice
-
./ssh-server/data/students.csv
ファイルを作成し、以下のように学籍番号を追加します:70112001 70112002 ...
-
環境を起動します:
./run.sh
-
コンテナが起動した後、ssh-logs/auth.log ファイルが生成されたことを確認したのち、以下のコマンドを実行することで、ユーザーごとのステータスを確認できます。
docker logs -f watcher-ssh
-
終了時は以下のコマンドでコンテナを停止します。
docker compose down
run.sh
: 環境起動スクリプトcompose.yaml
: Docker Compose設定ファイルDockerfile
: SSHサーバーのDockerイメージ定義setup_users.sh
: ユーザー設定スクリプトstart.sh
: コンテナ起動スクリプトstudents.csv
: 学籍番号リストssh_config_match.conf
: SSHサーバー設定ファイル(keyユーザーが公開鍵認証できるようにするためのconfig)
ssh -p 2222 [学籍番号]pass@[ホストIP]
例:
ssh -p 2222 [email protected]
パスワードは学籍番号と同じです。
まず、クライアント側で公開鍵と秘密鍵のペアを生成します(まだ持っていない場合):
# id_ed25519_practiceというファイル名で鍵を生成
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_practice
次に、パスワード認証ユーザーとしてログインし、公開鍵認証ユーザーのauthorized_keysファイルに公開鍵を設定します:
# パスワード認証でログイン
ssh -p 2222 70112001pass@[ホストIP]
# パスワードを使ってkeyユーザーに切り替え
su 70112001key
# .sshディレクトリの権限を確認
ls -la ~/.ssh
# 権限が700でない場合は修正
chmod 700 ~/.ssh
# 公開鍵を追加
echo "ssh-ed25519 AAAA..." > ~/.ssh/authorized_keys
# または viエディタで編集
vi ~/.ssh/authorized_keys
# authorized_keysファイルの権限を確認
chmod 600 ~/.ssh/authorized_keys
最後に、公開鍵認証でログインを試みます:
ssh -i ~/.ssh/id_ed25519_practice -p 2222 70112001key@[ホストIP]
デバッグと管理目的で、管理者用のユーザーアカウントが用意されています:
- ユーザー名:
kanolab
- パスワード:
kano2333
- 権限: sudo権限付き(管理者として利用可能)
# 管理者としてログイン
ssh -p 2222 kanolab@[ホストIP]
# 管理者権限でコマンド実行
sudo [コマンド]
このアカウントは環境の管理、トラブルシューティング、デバッグ目的で使用してください。
- passユーザー: パスワード認証のみ有効
- keyユーザー: 公開鍵認証のみ有効(パスワード認証は無効)
- 各ユーザーは別々のグループに所属
- .sshディレクトリは700、authorized_keysファイルは600の権限に設定
- ホームディレクトリは750の権限に設定
ローカルでコンテナを起動したのちに、
# コンテナの起動
./run.sh
別のセッションを起動し、ホストIPにlocalhost
を指定してログインを試みます。(公開鍵認証ユーザーも同じです)
ssh -p 2222 70112001pass@localhost
SSHの認証ログは以下のファイルで確認できます:
cat /var/log/ssh.log
公開鍵認証でログインできない場合:
-
権限を確認:
ls -la ~/.ssh # 700 ls -la ~/.ssh/authorized_keys # 600
-
SSHサーバーのデバッグログを確認:
# Dockerコンテナ内で実行 cat /var/log/ssh.log
-
詳細なデバッグ情報を含めてSSH接続を試す:
ssh -vvv -i ~/.ssh/id_ed25519_practice -p 2222 [学籍番号]key@[ホストIP]
このプロジェクトはMITライセンスの下で公開されています。
Mizuki Baba [email protected]