リモート接続の設定
具体的にはメイン機というか、Windows11 のパソコンのターミナルから Ubuntu機を操作したいので、基本の SSH と Cockpit を入れます。Webmin ? そこまでいらんかな。
SSHでログインする
まずは SSH のインストール。これは Ubuntu機 のターミナルで行う。
sudo apt install openssh-server
SSH port 22 を変更
/etc/ssh/sshd_config
に記述。
このやり方でできるのは 22.04 までらしい。
まず設定ファイルをバックアップ。.org
付けてコピー。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
設定ファイルを開き、#port 22
の下あたりに port 2549
とか任意のポート番号を追加して、サービスを再起動。
sudo nano /etc/ssh/sshd_config : #port 22 port 2549 : systemctl restart ssh
22.10 以降では別の設定ファイル /lib/systemd/system/ssh.socket
を開いて、ListenStream=22
の値を任意のポート番号に書き換えて、
設定変更を反映。
Unit ファイル群の変更を Systemd に反映。
sudo cp /lib/systemd/system/ssh.socket /lib/systemd/system/ssh.socket.org sudo nano /lib/systemd/system/ssh.socket : ListenStream=2549 : sudo systemctl restart ssh.socket sudo systemctl daemon-reload
IPアドレス
ip a
静的アドレスを設定するかルーターの固定アドレスに登録。(うちはルーターで一元管理)
ufw (ファイアウォール)の設定
Ubuntu は ufw 自体初めから入っていてインストールする必要はない。
初期状態はファイアウォール無効になっているので、すべての通信が許可されている。
有効化するとデフォルトはALL incoming 廃棄、outgoing 許可になる。
つまり、外への通信はすべて許可、外からアクセスされるものはすべて廃棄されて中に入れない。
ここでは port 2549 へ 192.168.1.*** からのアクセスのみ、かつ「30秒間の間に6回以上接続を試みた IP アドレスを許可しない」を設定。有効化して、設定内容を確認しておく。
sudo ufw limit from 192.168.1.0/24 to any port 2549 sudo ufw enable sudo ufw status
To Action From -- ------ ---- 2549 LIMIT IN 192.168.1.0/24
ここから Windows機 で。
ターミナル(PowerShell)を起動して、
ssh jiji@192.168.1.22 -p 2549
で、パスワードを入れて Ubuntu機 にログイン。
(ユーザー名とかIPアドレス、それから先程設定したポート番号も、ここでは架空のものに置き換えています)
公開鍵認証
そのまま SSH で接続したままの作業。
Ubuntu機 のホームディレクトリ直下に .ssh
フォルダ作成して、パーミッション設定。
mkdir ~/.ssh chmod 700 ~/.ssh
ここで一旦 SSH からログアウトして、
exit
プロンプトが PS C:\Users\jeff>
になったら、SSH キーペア(公開鍵と秘密鍵)を生成する。
mkdir ~/.ssh cd ~/.ssh ssh-keygen -t ed25519 -f nekosu_key
暗号形式を ed25519
に、ファイル名を nekosu_key
に指定。
生成すると、.ssh
フォルダ内に、秘密鍵 nekosu_key
と、公開鍵 nekosu_key.pub
が生成される。
作った公開鍵を、Ubuntu 機の .ssh
フォルダ内に転送。
ポート指定は -P
。こちらは大文字なので注意。
cd ~/.ssh scp -P 2549 nekosu_key.pub jiji@192.168.1.22:~/.ssh/
ssh-copy-id
が PowerShell で使えなかったから手動で登録する。
ssh jiji@192.168.1.22 -p 2549 cd ~/.ssh cat nekosu_key.pub >> authorized_keys chmod 600 authorized_keys rm -f nekosu_key.pub
ssh
コマンドで Ubuntu機 にログインし、.ssh
ディレクトリに移動。
cat
コマンドで nekosu_key.pub
の中身を authorized_keys
というファイルに、追記。(ファイルがなかったら勝手に作られる)
chmod
コマンドでファイルの権限を 600
に変更。
送信した公開鍵はもう不要なので rm
コマンドで削除。
/etc/ssh/sshd_config
を開いて #PubkeyAuthentication yes
を PubkeyAuthentication yes
に変更してサービスを再起動する。
sudo nano /etc/ssh/sshd_config : PubkeyAuthentication yes : sudo systemctl restart ssh
一旦、ログアウトして、
jiji@KiKis-delivery-service:~$ exit ログアウト Connection to 192.168.1.22 closed. PS C:\Users\jeff> ssh -i ~/.ssh/nekosu_key jiji@192.168.1.22 -p 2549
で、ログインできたら公開鍵認証はOK。
これでジジが、キキの Ubuntu機 にジェフの Windows機 から鍵認証でSSH接続できるようになりました。
ちなみに SCP するときは、
scp -P 2549 -i ~/.ssh/nekosu_key [送信ファイル] jiji@192.168.1.22:[送る場所]
オプションの順番が違うとエラーになる。
よりセキュアにしたいなら、先程の /etc/ssh/sshd_config
の何行目かにある #PasswordAuthentication yes
を PasswordAuthenticaiton no
に書き換えて保存、サービス再起動で、パスワード認証では入れなくなる。
Cockpit の導入
パッケージのインストール。
sudo apt install cockpit systemctl enable cockpit.socket sudo ufw allow 9090 sudo ufw reload
ファイアウォールでポート 9090 を開けておく。
Windows の Web ブラウザで、[Ubuntu機 の IPアドレス]:9090/
へアクセス。
※SSHポート番号、キーペアの名称などはフィクションです。自分の設定に置き換えてください。