自宅サーバーを立ち上げるときに、最初につまずきがちなのが「画面をどうやって出すか?」という問題。家にいるならHDMIケーブルをつないでモニターに表示すればいいんですが、毎回そのためにケーブルを差し替えるのって、地味に面倒なんですよね。そもそもディスプレイの数やHDMI端子にも限りがあるし、わざわざ作業スペースを増やしたくもない。
そこで今回は、SSH接続を使って、メインPCからそのまま自宅サーバーを操作できるようにする方法を紹介します。これなら、モニターなしでも快適に運用できますし、後々VPN経由で外部からアクセスする場合にもそのまま応用できます。
どうせならセキュリティもしっかり意識して、公開鍵認証方式での接続を設定していきます。クライアントとサーバー両方の設定が必要ですが、手順をひとつずつわかりやすく解説していくので、初心者の方でも安心して導入できるはずです。
Contents
使用した機器
- サーバー用PC: Ubuntu Server 24.04LTS
- Linux系統であればコマンドの差異はありつつ、ほぼ同じ流れで導入できると思います。
- クライアントPC: Windows 11(WSL2導入済)
サーバーにSSHを導入しアクセスしてみる
サーバーに固定IPを設定
任意の方法でサーバーPCに固定IPを設定します。固定IPを設定しない場合、定期的にサーバーのIPアドレスが切り替わってしまうため、毎回確認してアクセスする必要が出てきます。
IPを固定する方法としては、ルーターのDHCPで固定する方法とサーバー側で指定する方法の2通りがあります。手順については以下の記事を参照してください。ちなみに自分はDHCP側で固定しています。
サーバーへSSHをインストールし起動する
まずOpenSSHをインストールします。場合によってはインストール済と表示されるかもしれません。
sudo apt install openssh-server
次にsshを起動して、状態を確認してみます。systemctl status sshを実行したときにactiveと表示されればsshの起動成功です。
# 起動
sudo systemctl start ssh
# sshの起動状態を確認
sudo systemctl status ssh
クライアント(他のPC)からSSHしてみる
同じネットワーク内に存在するPCからSSHを試してみます。今回はWSL2にインストールしたUbuntuからSSHをします。
固定IPが正しく設定されていれば以下でSSH接続が可能なはずです。初期設定であればパスワード認証のはずなので、パスワードを入力してログインします。
ssh {サーバーのユーザー名}@{サーバーの固定IP}
パスワード入力後にWelcome to …みたいに表示されたら成功です。
SSHに公開鍵認証を設定する
クライアントで鍵を生成する
まずクライアント側のPCでキーペアを生成します。生成時に以下の内容を聞かれますが、状況と用途に合わせて設定してください。
- file
- 任意で問題ありませんが、既に存在する場合はファイル名を変えた方が良いかもしれません。
- passphrase
- 設定しておいた方が安全です。使用時に毎回入力を求められるデメリットはあるので、使い勝手と安全性のどちらを重視するかのトレードオフだと思います。
ssh-keygen -t ed25519 -C
参考: https://www.ssh.com/academy/ssh/keygen
実行後には設定したファイル名でキーペアが生成されています。デフォルトのファイル名で生成した場合はid_ed_25519(秘密鍵)とid_ed_25519.pub(公開鍵)が作られているはずです。
この二つの中で公開鍵の方をサーバー側に登録しておくことになります。(公開鍵認証について気になる方は調べてみると面白いかもしれません)
公開鍵をサーバーに登録する
以下のコマンドでサーバーに公開鍵をコピーします。パスの部分は先ほどの手順で生成した公開鍵のパスに置き換えてください。
ssh-copy-id -i ~/.ssh/id_ed25519.pub {サーバーのユーザー名}@{サーバーの固定IP}
参考: https://www.ssh.com/academy/ssh/copy-id
再度サーバーにSSHしてみる
先ほどと同じコマンドでサーバーへSSHしてみます。正しく公開鍵の設定が完了していれば、パスワード認証ではなくなっていることがわかると思います。代わりに鍵のpassphrase入力を求められます。
ssh {サーバーのユーザー名}@{サーバーの固定IP}
サーバー側でパスワード認証を無効化する
公開鍵認証ができるようになったら、パスワード認証はセキュリティホールでしかないので、無効化します。
まず、サーバーにSSHした状態で以下のファイルを開きます。
# 好きなテキストエディタを使用する(emacs, vim, nano)
sudo nano /etc/ssh/sshd_config
以下を設定します。セキュリティ上他にも設定した方が良いものはありますが、本筋と離れるのでいったん割愛。
PasswordAuthentication no
設定が変更出来たらsshのrestartをします。
systemctl restart sshd
ここまで完了したら大筋は完了です。
※もしこの設定をしてもパスワード認証できてしまう場合、多分/etc/ssh/sshd_config.d/50-cloud-init.confの設定が優先されています。こいつを上書きするか、/etc/ssh/sshd_config.d/0-my.confなど適当なファイルを作成してPasswordAuthenticationを上書きしてください。
便利設定
クライアントからSSHする際に毎回ユーザー名@IPアドレスを入力するのは面倒なので、ショートカットを設定します。
~/.ssh/configに接続先の設定を以下のように保存しておきます。
# serverの部分は任意の名前
Host server
HostName {サーバーの固定IP}
User {サーバーで使用するユーザー名}
Port 22
IdentityFile ~/.ssh/id_ed25519
これにより以下のようにHostで指定した名前を使用してSSH可能になります。
ssh server
最後に
というわけで、無事に自宅サーバーへSSH接続できるようになりました。わざわざディスプレイやキーボードを用意しなくても、手元のPCからサーバーを操作できるのは結構快適ですね。
公開鍵認証にしておけば、セキュリティ面でも安心ですし、今後VPN経由で外から接続する際にもそのまま使えるので、今回の設定はベースとしてかなり役に立つと思います。
もし途中でわからないことがあれば、ぜひコメントで教えてください。