Otama's Playground > サーバー > 【初心者向け】自宅サーバーへSSH+公開鍵で接続する手順

【初心者向け】自宅サーバーへSSH+公開鍵で接続する手順

自宅サーバーを立ち上げるときに、最初につまずきがちなのが「画面をどうやって出すか?」という問題。家にいるならHDMIケーブルをつないでモニターに表示すればいいんですが、毎回そのためにケーブルを差し替えるのって、地味に面倒なんですよね。そもそもディスプレイの数やHDMI端子にも限りがあるし、わざわざ作業スペースを増やしたくもない。

そこで今回は、SSH接続を使って、メインPCからそのまま自宅サーバーを操作できるようにする方法を紹介します。これなら、モニターなしでも快適に運用できますし、後々VPN経由で外部からアクセスする場合にもそのまま応用できます。

どうせならセキュリティもしっかり意識して、公開鍵認証方式での接続を設定していきます。クライアントとサーバー両方の設定が必要ですが、手順をひとつずつわかりやすく解説していくので、初心者の方でも安心して導入できるはずです。

使用した機器

  • サーバー用PC: Ubuntu Server 24.04LTS
    • Linux系統であればコマンドの差異はありつつ、ほぼ同じ流れで導入できると思います。
  • クライアントPC: Windows 11(WSL2導入済)

サーバーにSSHを導入しアクセスしてみる

サーバーに固定IPを設定

任意の方法でサーバーPCに固定IPを設定します。固定IPを設定しない場合、定期的にサーバーのIPアドレスが切り替わってしまうため、毎回確認してアクセスする必要が出てきます。

IPを固定する方法としては、ルーターのDHCPで固定する方法とサーバー側で指定する方法の2通りがあります。手順については以下の記事を参照してください。ちなみに自分はDHCP側で固定しています。

サーバーへSSHをインストールし起動する

まずOpenSSHをインストールします。場合によってはインストール済と表示されるかもしれません。

Bash
sudo apt install openssh-server

次にsshを起動して、状態を確認してみます。systemctl status sshを実行したときにactiveと表示されればsshの起動成功です。

Bash
# 起動
sudo systemctl start ssh
# sshの起動状態を確認
sudo systemctl status ssh

クライアント(他のPC)からSSHしてみる

同じネットワーク内に存在するPCからSSHを試してみます。今回はWSL2にインストールしたUbuntuからSSHをします。

固定IPが正しく設定されていれば以下でSSH接続が可能なはずです。初期設定であればパスワード認証のはずなので、パスワードを入力してログインします。

Bash
ssh {サーバーのユーザー名}@{サーバーの固定IP}

パスワード入力後にWelcome to …みたいに表示されたら成功です。

SSHに公開鍵認証を設定する

クライアントで鍵を生成する

まずクライアント側のPCでキーペアを生成します。生成時に以下の内容を聞かれますが、状況と用途に合わせて設定してください。

  • file
    • 任意で問題ありませんが、既に存在する場合はファイル名を変えた方が良いかもしれません。
  • passphrase
    • 設定しておいた方が安全です。使用時に毎回入力を求められるデメリットはあるので、使い勝手と安全性のどちらを重視するかのトレードオフだと思います。
Bash
ssh-keygen -t ed25519 -C

参考: https://www.ssh.com/academy/ssh/keygen

実行後には設定したファイル名でキーペアが生成されています。デフォルトのファイル名で生成した場合はid_ed_25519(秘密鍵)とid_ed_25519.pub(公開鍵)が作られているはずです。

この二つの中で公開鍵の方をサーバー側に登録しておくことになります。(公開鍵認証について気になる方は調べてみると面白いかもしれません)

公開鍵をサーバーに登録する

以下のコマンドでサーバーに公開鍵をコピーします。パスの部分は先ほどの手順で生成した公開鍵のパスに置き換えてください。

Bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub {サーバーのユーザー名}@{サーバーの固定IP}

参考: https://www.ssh.com/academy/ssh/copy-id

再度サーバーにSSHしてみる

先ほどと同じコマンドでサーバーへSSHしてみます。正しく公開鍵の設定が完了していれば、パスワード認証ではなくなっていることがわかると思います。代わりに鍵のpassphrase入力を求められます。

Bash
ssh {サーバーのユーザー名}@{サーバーの固定IP}

サーバー側でパスワード認証を無効化する

公開鍵認証ができるようになったら、パスワード認証はセキュリティホールでしかないので、無効化します。

まず、サーバーにSSHした状態で以下のファイルを開きます。

Bash
# 好きなテキストエディタを使用する(emacs, vim, nano)
sudo nano /etc/ssh/sshd_config

以下を設定します。セキュリティ上他にも設定した方が良いものはありますが、本筋と離れるのでいったん割愛。

Plaintext
PasswordAuthentication no

設定が変更出来たらsshのrestartをします。

Bash
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に接続先の設定を以下のように保存しておきます。

Plaintext
# serverの部分は任意の名前
Host server
    HostName {サーバーの固定IP}
    User {サーバーで使用するユーザー名}
    Port 22
    IdentityFile ~/.ssh/id_ed25519

これにより以下のようにHostで指定した名前を使用してSSH可能になります。

Bash
ssh server

最後に

というわけで、無事に自宅サーバーへSSH接続できるようになりました。わざわざディスプレイやキーボードを用意しなくても、手元のPCからサーバーを操作できるのは結構快適ですね。

公開鍵認証にしておけば、セキュリティ面でも安心ですし、今後VPN経由で外から接続する際にもそのまま使えるので、今回の設定はベースとしてかなり役に立つと思います。

もし途中でわからないことがあれば、ぜひコメントで教えてください。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です