SSHの設定方法|Arch Linuxでsshdを起動し、公開鍵(ssh-keygen)と~/.ssh/configで接続する

SSHで安全につなぐ

Hyper-Vなどの仮想マシンに入れたArch Linuxを、コンソール画面ではなく手元のターミナルから操作したいときは、SSHで接続できるようにします。Arch LinuxでOpenSSHのサーバー(sshd)を動かし、Windowsなどから接続し、公開鍵認証と~/.ssh/configの設定まで進めると、コマンドのコピー&ペーストもパスワードなしのログインもできるようになります。

例に出てくる192.0.2.10(接続先のIPアドレス)と「ユーザー名」は、自分の環境のものに読み替えてください。Arch Linuxのインストールがまだなら「Arch Linuxのインストール手順」から始めてください。

目次

Arch LinuxにOpenSSHを入れてsshdを起動する

openssh パッケージを入れる

sudo pacman -S openssh

Arch Linuxでは、SSHのクライアント(ssh)とサーバー(sshd)のどちらも openssh パッケージに入っています(ArchWiki「OpenSSH」)。

sshdを起動し、PCを起動したときにも動くようにする

sudo systemctl enable --now sshd

enableに--nowを付けると、自動起動の設定と同時にsshdを起動します(systemctl(1))。sshdの設定ファイルは/etc/ssh/sshd_configで、sshdはsshd.serviceとして動きます(ArchWiki「OpenSSH」)。

sshdが動いているか確かめる

systemctl status sshd

Active:の行がactive (running)になっていれば、sshdは動いています(systemctl(1)の表示例)。

IPアドレスを調べて、WindowsからSSHで接続する

Arch Linux側でIPアドレスを調べる

ip address show

仮想マシンのコンソールで実行し、lo(ループバック。ネットワークの接続には使わない)以外のインターフェースに付いたIPv4アドレスを控えます(ArchWiki「Network configuration」)。ip address showは、ネットワークの各インターフェースに付いたアドレスを一覧にします(ip-address(8))。

WindowsにOpenSSHクライアントが入っているか確かめる

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

管理者として開いたPowerShellで実行します。OpenSSH.ClientのStateがInstalledでなければ、次のコマンドで入れます。対象はWindows 10(ビルド1809)以降・Windows Server 2019以降です(Microsoft「Get started with OpenSSH for Windows」)。

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

ssh コマンドで接続する

ssh ユーザー名@192.0.2.10

WindowsのPowerShell、macOSやLinuxのターミナルで実行し、Arch Linuxのユーザーのパスワードを入力します。sshdの待ち受けポートは、変えていなければ22です(sshd_config(5))。

初めて接続したときの確認メッセージ

cd /etc/ssh
ssh-keygen -l -f ssh_host_ed25519_key.pub

初めて接続するサーバーでは、サーバーの公開鍵のフィンガープリントが表示され、接続を続けるか聞かれます。Arch Linuxのコンソールで上の2行を実行してフィンガープリントを表示し、同じであればyesと入力します。受け入れた鍵は、接続した側の~/.ssh/known_hostsに保存されます(ssh(1))。

ssh-keygenで鍵を作り、公開鍵認証で接続する

接続する側のPCで鍵を作る

ssh-keygen -t ed25519

接続する側(Windows・macOS・Linux)で実行します。保存先を聞かれたらEnterで既定の場所(~/.ssh/id_ed25519、WindowsではC:\Users\ユーザー名\.ssh\id_ed25519)を使い、パスフレーズを2回入力します。秘密鍵がid_ed25519、公開鍵がid_ed25519.pubです(ssh-keygen(1)、Windowsの場所はMicrosoft「Key-based authentication in OpenSSH for Windows」)。

秘密鍵(.pubが付いていないほう)はパスワードと同じように扱い、ほかの人やサーバーに渡さないでください。パスフレーズを忘れると元に戻す方法はなく、鍵を作り直すことになります(ssh-keygen(1))。Microsoftも、空のパスフレーズはすすめていません(Key-based authentication in OpenSSH for Windows)。

Linuxなどから公開鍵を登録する(ssh-copy-id)

ssh-copy-id ユーザー名@192.0.2.10

接続する側にssh-copy-idがある場合に使えます(Arch Linuxでは openssh パッケージに入っています)。パスワードを入力すると、公開鍵がArch Linuxのユーザーの~/.ssh/authorized_keysに追加されます(ssh-copy-id(1))。

Windowsから公開鍵を登録する(scpで送ってから追加)

scp $env:USERPROFILE\.ssh\id_ed25519.pub ユーザー名@192.0.2.10:

PowerShellで実行し、公開鍵をArch Linuxのホームディレクトリに送ります。最後の:を忘れないでください。続けてArch Linuxにパスワードで接続し、次のコマンドでauthorized_keysに追加します(ArchWiki「SSH keys」)。

install -dm700 ~/.ssh
cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
rm ~/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys

install -dm700で~/.sshを自分だけが読み書き・実行できるフォルダーとして作り、chmod 600でauthorized_keysを自分だけが読み書きできる権限にします(chmod(1))。ほかのユーザーが書き込める状態だと、sshdは初期設定(StrictModes yes)ではこのファイルを使いません(sshd(8)、sshd_config(5))。

鍵で接続できるか確かめる

ssh ユーザー名@192.0.2.10

ユーザーのパスワードを聞かれずにログインできれば、公開鍵認証で接続できています(ssh(1))。鍵にパスフレーズを付けた場合は、鍵のパスフレーズを入力します。

~/.ssh/configで接続先に名前を付ける

Host arch-vm
    HostName 192.0.2.10
    User ユーザー名
    Port 22

接続する側のPCで~/.ssh/config(Windowsでは%userprofile%\.ssh\config)に書きます(Microsoft「OpenSSH Server configuration for Windows」)。Hostの後ろが接続するときに使う名前、HostNameが実際の接続先です(ssh_config(5))。

ssh arch-vm

これでssh ユーザー名@192.0.2.10と同じ接続になります。鍵の場所を~/.ssh/id_ed25519から変えていなければ、IdentityFileを書かなくてもその鍵が使われます(ssh_config(5))。

~/.ssh/configは、自分が読み書きでき、ほかのユーザーは書き込めない権限にしておく必要があります。同じ項目を何度も書いたときは最初に書いた値が使われるので、個別のHostを上に、全体の設定(Host *)を下に書きます(ssh_config(5))。

sshd_configでパスワードでのログインを止める

PasswordAuthentication no
AuthenticationMethods publickey

Arch Linux側で、/etc/ssh/sshd_config.dフォルダーに、この名前のファイルをsudoで作ります。PasswordAuthenticationの既定はyesなので、書かないとパスワードでもログインできます(sshd_config(5))。ファイル名と中身はArchWikiの例のとおりです(ArchWiki「OpenSSH」)。

先に「鍵で接続できるか確かめる」まで済ませてください。鍵を登録していないユーザーは、この設定のあとSSHでログインできなくなります。設定を変えている間は、仮想マシンのコンソールを閉じないでおくと、うまくいかなかったときに元に戻せます。

sudo sshd -t

設定ファイルに誤りがないか確かめます。何も表示されなければ問題ありません(ArchWiki「OpenSSH」)。

sudo systemctl restart sshd

sshdを再起動して設定を反映し、別のターミナルからssh arch-vmで接続できるか確かめます。

sshd_configは、同じ項目が何度も出てきたときに最初の値を使います(sshd_config(5))。sshd_config.dフォルダーの.confファイルは、Arch Linuxのsshd_configにあるIncludeで読み込まれ(ArchWiki「OpenSSH」)、ファイル名の順に処理されます(sshd_config(5))。rootでのログインは、既定のPermitRootLogin prohibit-passwordでパスワードとキーボード対話式の認証ができなくなっています(sshd_config(5))。

SSHで接続できないときに確かめること

接続の途中経過を表示する

ssh -v ユーザー名@192.0.2.10

-vを付けると、接続・認証・設定のどこで止まっているかが表示されます。-vv、-vvvと増やすとさらに詳しくなります(ssh(1))。

鍵が使われないときは権限を直す

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -ld ~

Arch Linux側で実行します。1行目と2行目で、~/.sshを700、authorized_keysを600にします(chmod(1))。3行目でホームディレクトリの権限を確かめます(ls(1))。表示の左から6文字目(グループ)か9文字目(ほかのユーザー)がwなら、ほかのユーザーが書き込める状態です(POSIX「ls」)。ホームディレクトリ、~/.ssh、authorized_keysのどれかがほかのユーザーに書き込める状態だと、sshdは初期設定(StrictModes yes)ではauthorized_keysを使いません(sshd(8)、sshd_config(5)、ArchWiki「SSH keys」)。

「REMOTE HOST IDENTIFICATION HAS CHANGED」と出たとき

ssh-keygen -R 192.0.2.10

サーバーの鍵が前に接続したときと変わると、sshは警告を出してパスワード認証を止めます(ssh(1))。仮想マシンを作り直したなど、鍵が変わった理由がはっきりしているときだけ、接続する側で上のコマンドを実行して古い鍵をknown_hostsから消します(ssh-keygen(1))。そのあと、初めて接続したときと同じようにフィンガープリントを確かめます。

GitHubへのSSH接続で「Permission denied (publickey)」と出るときは、「GitHubでgit cloneが認証エラーになるときの直し方」を見てください。家の外からSSHで接続したいときのルーターの設定は「ポートフォワードとは?」にあります。

古い情報から変わったSSHの鍵の扱い(2026年10月20日時点)

2026年10月20日時点で、OpenSSHの最新版は10.6(2026年10月6日公開)です(OpenSSH)。古い記事の手順を使うときは、次の変更に注意してください(OpenSSH Release Notes)。

  • ssh-keygenの既定はEd25519:OpenSSH 9.5(2023年10月4日)から、-tを付けずに実行するとEd25519の鍵を作ります。RSAの鍵を作る場合の既定の長さは3072ビットです(ssh-keygen(1))
  • RSAのSHA-1署名(ssh-rsa)は既定で無効:OpenSSH 8.8(2021年9月26日)から、SHA-1を使うRSA署名が既定で使えなくなりました。多くの場合、RSAの鍵そのものを作り直す必要はなく、今あるRSAの鍵は使える場合にSHA-256・SHA-512の署名を自動で使います
  • DSAの鍵はOpenSSH 10.0以降で使えない:OpenSSH 10.0(2025年4月9日)以降では、DSAの署名方式が削除されています(2015年から既定では無効)。DSAの鍵(id_dsa)を使っている場合は、Ed25519などで鍵を作り直して登録し直します

参考

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次