今回は使っていないPC=mac、サーバー=ubuntuでやってみましたが、mac以外でもubuntu以外でもほぼ作業は変わらないのでご参考に。
目標
- 古いmacをdockerサーバーにする
- メインで使っているPCからSSHで接続して操作する
- 設定終わったら部屋の隅で電源入れっぱなしにする
- dockerの研究用
環境
mac : macmini(2011)
USBメモリ: 64G
ubuntu: ubuntu-20.04.1-desktop-amd64.iso
USBメモリにubuntuのインストーラーを入れて、そこから起動してインストールする。
USBメモリは余っていた64Gのものを使用。事前にディスクユーティリティでMSDOSフォーマットした。
古いmacには以下のものを繋いだ
有線LAN
有線キーボード
有線マウス
モニタ
作業が終わったらLANケーブル以外全部外す予定。
インストール
USBメモリにisoを焼く
1. ダウンロード
isoはミラーから落とす方が速い。色々試したが理研のサーバーが一番速かった。
日本国内のダウンロードサイト | Ubuntu Japanese Team
ここからubuntu-20.04.1-desktop-amd64.iso
をダウンロード。
2. Etcherでisoをusbに焼く
Ubuntu20.04LTSのブートUSBをMacで作成する - Qiita
ラズパイ の OS イメージを焼くときは Etcher が 便利 & UI カッコいい | 験なきものを思はずは
古いmacをフォーマット
ディスクユーティリティでフォーマットする。ただしインストールの過程でフォーマットするのでこの工程いらないかも。
USBからインストール
古いmacにUSBメモリを刺してoptionキーを押したまま起動。USBのイメージ(?)がなぜか2つ表示されるけどどちらでも良いらしい。クリックしてインストール開始。
最初の選択肢で言語を選べるので素直に日本語を選択。ユーザー名とパスワードだけ忘れないように設定。
あとは適当。できるだけ最小限で余計な物を入れないようにした。
初期設定(サーバーで直接操作)
(ここからは「古いmac」を「サーバー」と呼びます)
最低限必要な操作だけサーバー側で操作する。「端末」という名のターミナルを開く。
sudo apt-get install ssh
systemctl start sshd
これでとりあえずssh接続できる。
接続するipを調べる。
ip a
色々出たけど192.168.0.24
の部分だけ控えとく。
ちなみにtips
上ではapt-get install
しているけど、現在はapt install
が推奨されているらしいです。
初期設定(SSHで繋いで操作)
クライアントである普段使いのPCから接続。
ssh ユーザー名@ホスト名orIP
という形式で。
パスワードを入れたら接続できる。
ssh atu@192.168.0.24
atu@192.168.0.24's password:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-58-generic x86_64)
vimを入れようとしたら失敗
sudo apt upgrade
sudo apt install vim
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 636
ググって解決。
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo apt install vim
vimを使ったことがない人は
vim 使い方
等でググって調べて下さい。
ここから必要な工程
- ipアドレスの固定化
- ssh鍵の作成、設置
- sshdの設定変更
- ルートログインを不可に
- パスワードログインを不可に
- port変更
- sleepしないように設定変更
ここからは指定のない限りメインPC(クライアント)での作業になる。
ipアドレスの固定化
とりあえず接続できたけど、今のままではルーターが時間制限有りでIPを割り振っている状態なので接続できなくなる可能性がある。
まず現在の状態を確認し、インターフェイス名を控えておく(下記のenp2hogeの部分)
# サーバー側
$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp2hoge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.0.24/24 brd 192.168.0.255 scope global dynamic noprefixroute enp2hoge
valid_lft 83300sec preferred_lft 83300sec
/etc/netplan/
の下に新しくyamlファイルを作成する。もともと01-network-manager-all.yaml
というファイルがあるが、01
の部分を大きい数字にすれば上書きされるのでこのファイルは残しておく。
sudo vim /etc/netplan/99_config.yaml
環境に応じて以下の様に書く。
enp...
の部分を先程控えたインターフェイス名に書き換え、addressesを固定ipに書き換える。
network:
version: 2
ethernets:
enp2hoge:
addresses:
- 192.168.0.222/24
gateway4: 192.168.0.1
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
注意点
- gateway4 -> もともと繋がっているルーターのアドレス
- addresses -> gateway4の範囲内で指定。この場合は192.168.0.0から192.168.0.255まで
- ↑とは言っても少ない値だったらカブってしまう可能性もあるので192.168.0.100-255くらい?
- ルーターの設定により特定のIPが(例えば100以上)使えない場合もあるので注意
- この設定では
192.168.0.222
でIPが固定される -
192.168.0.222/24
の最後の部分/24
がサブネットマスク -
nameservers
はgoogleの8.8.8.8
でもなんでもお好きなヤツを - 保存したら設定を反映させる↓
sudo netplan apply
ここで固まる。ctrl+cも受け付けないのでサーバー側で直接ip a
してみたら設定は反映されてた。
ipアドレスが変わったことで接続ができなくなって固まったということ?
このコマンドはサーバー実機で直接行う方が良さそう。
参考:
【Ubuntu】 /etc/netplan/50-cloud-init.yamlを編集するの止めろ - Qiita
sshの設定
まずクライアントのmacで鍵を作成。私の.ssh/config
は設定が多数あるので以下のような構成にしている。
tree
.
├── config
├── github
│ ├── github_rsa
│ └── github_rsa.pub
└── gitlab
├── id_rsa
└── id_rsa.pub
- 各hostごとにディレクトリを切ってその中に鍵を入れているのですが、そこまでしたくない人は適当に読み替えて下さい。
ssh.keygen
で鍵を作るのに昔はrsaを使っていたが現在は非推奨になっているらしい。ed25519がOpenSSH 7.2から使えるようになっているらしいのでバージョン確認。
# クライアント
ssh -V
OpenSSH_7.9p1, LibreSSL 2.7.3
# サーバー
ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020
ed25519が使えるようなので作業開始。
# クライアント
cd .ssh
mkdir macmini
ssh-keygen -t ed25519 -f ~/.ssh/macmini/id_ed25519
次にクライアントで.ssh/config
の編集。以下の部分を追加した。
host macmini
HostName 192.168.0.222
Port 22
User atu
IdentityFile ~/.ssh/macmini/id_ed25519
クライアントの設定は終わったので次に鍵をサーバーに置く。
上記の例では~/.ssh/macmini/id_ed25519.pub
が作成されている。これが公開鍵になる。
scp使うとか色々方法はあるけど今回はid_ed25519.pub
を開いて全文コピー、サーバーでペーストした。
# サーバー
mkdir .ssh
vim ~/.ssh/authorized_keys
# vimでペーストして保存
一旦サーバーからexitして接続できるか確認。パスワードを聞かれることなく接続できたら成功。
ssh macmini
参考:
sshdの設定変更
このままでは外部から侵入された時にブルートフォースされる可能性があるので設定変更。今の所公開する予定は無いけど念の為にsshd_configを書き換える。
以下はssh macmini
してからサーバーでの作業。
sudo vim /etc/ssh/sshd_config
基本的に変更する項目を探して#
のコメントアウトを外して値を書き換えるだけ。
たとえばPortの変更は#Port 22
の#
を消して22
の部分を変更する。
変更したのは以下の3つ。
Port 12345
PasswordAuthentication no
PermitRootLogin no
保存したら再起動。
sudo /etc/init.d/ssh restart
exitしてクライアント側の.ssh/config
を開きPortを変更。
host macmini
HostName 192.168.0.222
Port 12345
User atu
IdentityFile ~/.ssh/macmini/id_ed25519
再度ssh macmini
で接続できたら成功です。
サスペンドしない設定
サーバーがsleepしないように設定しなきゃいけないと思っていたんだけど、今の所ずっと動いてくれているので何もしてない。ノートパソコンをサーバーにする時は必要なのかも。
Ubuntu,Debianの自動サスペンドの解除 - Qiita
以上で作業終了。
まとめ
これらの作業を終わらせて2日経ちました。この後にdocker入れてpythonでbot作ってscpしてdocker runして無事に動いています。
サーバーはmacとして使っている時はちょっと動かしただけで轟音がしてたのですが、現在はとても静かに動いてくれています。
vagrant等で仮想サーバー建てて動かす方法もありますが、当然スリープしたら止まります。止まらないで24時間動いてくれるサーバーがあるのはやりたいことが膨らんで楽しいです。
古いPCを眠らせている方はぜひサーバーにして遊んでみて下さい!