はじめに
省電力 PC を開発機として使用していましたが、ある日突然 OS が立ち上がらなくなってしまい、結局 OS を再インストールしたので今後のために Docker を動作させるまでの設定をメモしておきます。
※バックアップは取るようにしようね…
OS のバージョン及びマシンスペックなど
OS バージョン
$ lsb_release -a
LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
CPU
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2120T CPU @ 2.60GHz
stepping : 7
microcode : 0x2f
cpu MHz : 1625.593
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
# 以下略
メモリー
$ free -h
total used free shared buff/cache available
Mem: 7.7Gi 596Mi 5.7Gi 6.0Mi 1.4Gi 6.8Gi
Swap: 2.0Gi 0B 2.0Gi
マザーボード
$ sudo dmidecode -t baseboard
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
Handle 0x0002, DMI type 2, 8 bytes
Base Board Information
Manufacturer: Gigabyte Technology Co., Ltd.
Product Name: H61M-USB3-B3-JP
Version: x.x
Serial Number:
固定 IP の設定(GUI)
有線 LAN の DHCP の設定を固定 IP に変更します。OS をインストールして SSH の設定するまではモニターを繋いでいたので、コマンドではなく画面から設定しました。
設定方法は以下の記事を参考にしました。
注意点としては IP を設定後、有線 LAN のトグルボタンの ON・OFF をしないと設定が反映されないことです。
SSH サーバの設定
openssh-server
をインストールして SSH 接続が出来るようにしていきます。
# 既存のパッケージをアップデート
$ sudo apt -y update
# openssh-server をインストール
$ sudo apt -y install openssh-server
インストール後は、/etc/ssh/sshd_config
の設定を変更します。
$ sudo apt -y vim
$ sudo vim /etc/ssh/sshd_config
# 以下の内容を修正
Port 22 # 任意のポートに変更
PermitRootLogin no # rootユーザーでログインを禁止する
MaxAuthTries 3 # 一つのセッションで認証試行を最大3回までに制限する
PasswordAuthentication no # パスワードによるログインを無効にする
PermitEmptyPasswords no # 空のパスワードを持つユーザーがSSH接続出来ないようにする
# sshデーモンを再起動して設定を反映させる
$ sudo systemctl restart sshd
# ステータスの確認
$ sudo systemctl status sshd
# Active: active (running) となっていることを確認
既存の秘密鍵から公開鍵を作成
残念なことに、公開鍵のバックアップを取っていませんでした…😢
鍵を再作成するのも手間なので、既存の秘密鍵から公開鍵を生成します。(秘密鍵はバ ックアップしていました。)
秘密鍵を持っている端末から USB やクラウドストレージを経由してサーバのデスクトップ画面など適当な場所へコピーします。
今回はdev-server
という名前の秘密鍵を使用していたものとします。
# ディレクトリがなければ作成する
$ mkdir ~/.ssh
$ mv [保存した秘密鍵のパス]/dev-server ~/.ssh
# アクセス権限を変更する
$ chmod 600 ~/.ssh/dev-server
# 秘密鍵から公開鍵を作成
$ ssh-keygen -y -f ~/.ssh/dev-server > ~/.ssh/dev-server.pub
# アクセス権限を変更する
$ chmod 600 ~/.ssh/dev-server.pub
# 公開鍵の名前を変更
$ mv ~/.ssh/dev-server.pub ~/.ssh/authorized_keys
これでクライアント秘密鍵は変更することなく接続できます。
authorized_keys とは?
authorized_keys
とは、サーバがクライアントを認証するために使用されます。
SSH 公開鍵認証をするためにクライアントは公開鍵と秘密鍵のペアを作成します。作成した公開鍵をサーバへ登録します。(鍵と言って も扱っている内容はデータになります)
このサーバへ登録した公開鍵を利用して、クライアントから送信されてきた秘密鍵の内容(電子署名)をサーバ側で検証します。
電子署名と言う単語が出てきましたが、クライアントはサーバへ SSH 接続する際に、端末内の秘密鍵を利用して電子署名を生成します。そして、サーバに登録されている公開鍵の内容で電子署名の内容が正しいと接続が許可される流れになります。
したがって、authorized_keys
という名前に変更するのは、サーバがその公開鍵を認証に使用するためというわけです。なお、一つのauthorized_keys
ファイルには複数の公開鍵を追加できます。これにより、複数のクライアント(それぞれが異なる公開鍵/秘密鍵ペアを持つ)が同じユーザーアカウントに接続できるようになります。
その都度、公開鍵の内容を追記して登録します。
authorized_keys
を使用する注意点としては、適切なアクセス権(パーミッション)が設定されている必要があります。適切なユーザーのみがこのファイルを読み書きできるようにすることです。一般的には、このファイルはユーザーのみが読み書きでき、その他のユーザー(グループまたはその他)はこのファイルを読むことができないようにすることが推奨されます。
そのため、chmod 600 ~/.ssh/dev-server.pub
を実行してアクセス権を変更しておく必要があります。これは秘密鍵も同様です。
SSH 接続出来るか確認する
ここからクライアント側の操作になります。サーバへ SSH 接続できるか確認しましょう。
クライアント側で~/.ssh/config
が作成されていなかった場合は以下の内容を記述します。
Host dev-server
HostName 192.168.xxx.xxx # サーバのIPアドレス
User sampleUser # 接続するユーザー名
Port xxxx # 任意のポート番号
IdentityFile ~/.ssh/dev-server # SSH接続する際に使用する秘密鍵
このファイルを作成しておくことで、SSH 接続する際にssh -i 鍵のファイルパス sampleUser@192.168.xxx -p xxx
などと指定せずに以下のように簡単に接続することが出来ます。
ぜひ設定しておきますよう。何ならこのconfig
ファイルの内容もバックアップしておきましょう。
$ ssh dev-server
Docker プロジェクトを保存する HDD をマウントする
OS をインストールするストレージには SSD を使用しましたが、開発のソースコードなどは容量の多い HDD を使用していました。
再インストールした際にその設定も消し飛んでしまったので、メモとして記述します。