閉じる

DebianでSSHを有効にする方法|インストールから接続確認まで解説

DebianでSSHを有効にする方法

Debianを別のパソコンから遠隔操作したい場合は、Debian側にopenssh-serverをインストールし、SSHサービスを起動します。本記事ではDebian 13を例に、インストールからWindows・Linux・macOSでの接続確認、安全性を高める設定まで順番に解説します。

最初に確認

コマンド内のUSERはDebianの実際のユーザー名、192.168.1.50はDebianに割り当てられた実際のIPアドレスへ置き換えてください。最初は同じ家庭内・社内LANに接続した端末から試すと確認しやすくなります。

最短手順

  1. Debianでopenssh-serverをインストールする
  2. sshサービスを有効化・起動する
  3. DebianのIPアドレスを確認する
  4. 別の端末からssh USER@IPアドレスで接続する
Debian側:インストールと起動
sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
hostname -I

SSHを有効にするとできること

SSH(Secure Shell)は、ネットワーク経由で別のコンピューターへ安全にログインするための仕組みです。通信内容は暗号化されます。Debianでは、接続を受け付ける側にopenssh-server、接続する側にSSHクライアントを使用します。

役割 操作する端末 必要なもの
SSH接続を受け付ける Debian openssh-server
Debianへ接続する Windows・Linux・macOS sshコマンド
認証されるユーザー Debian上の一般ユーザー パスワードまたは公開鍵
ルーターのポート開放は不要

同じLAN内から接続するだけであれば、通常はルーター側でポートを開放する必要はありません。SSHの22番ポートをインターネットへ直接公開すると攻撃対象になりやすいため、目的が明確でない状態ではポート開放しないでください。

OpenSSH Serverをインストールする

Debian側で端末を開き、パッケージ情報を更新してからopenssh-serverをインストールします。

Debian側
sudo apt update
sudo apt install openssh-server

Do you want to continue? [Y/n]と表示された場合は、Yを入力してEnterキーを押します。インストール時にSSHのホスト鍵も自動的に作成されます。

sudoを使用できない場合

管理者権限を持つユーザーで実行してください。rootパスワードを設定している環境ではsu -でrootへ切り替え、コマンド先頭のsudoを外す方法もあります。

SSHサービスを起動する

パッケージのインストール後は通常SSHサービスも起動しますが、次のコマンドで「現在起動する」と「次回以降の起動時にも自動起動する」を明示的に設定できます。Debianのサービス名はsshdではなくsshです。

有効化と起動
sudo systemctl enable --now ssh

続いて、サービスの状態を確認します。

稼働状態の確認
sudo systemctl status ssh --no-pager

Active: active (running)と表示されれば、SSHサービスは動作しています。画面を閉じる必要はありません。

22番ポートで待ち受けていることも確認しておくと、切り分けがしやすくなります。

待受ポートの確認
sudo ss -lntp | grep ':22'

0.0.0.0:22や[::]:22を含む行が表示されれば、SSHサーバーは標準の22番ポートで接続を待っています。

DebianのIPアドレスを確認する

接続先として指定するDebianのIPアドレスを確認します。

IPアドレスの確認
hostname -I

たとえば192.168.1.50と表示された場合、その値を接続先に使用します。複数表示されたときは、通常は接続元と同じLANに属する192.168.x.x、10.x.x.x、または172.16.x.x~172.31.x.xのアドレスを選びます。

どのネットワーク機器に割り当てられたアドレスか確認したい場合は、次のコマンドも使用できます。

インターフェース別に確認
ip -br address
IPアドレスは変わることがある

家庭用ルーターから自動取得しているIPアドレスは、再起動などで変わる場合があります。継続的にSSH接続するなら、ルーターのDHCP固定割り当て機能を使用すると管理しやすくなります。

別の端末からSSH接続する

ここからのコマンドは、SSHを有効にしたDebianではなく、Debianへ接続したい別のパソコンで実行します。

Windows 11・Windows 10から接続する

  1. PowerShellまたはWindows Terminalを開く

    スタートボタンを右クリックし、「ターミナル」または「PowerShell」を選びます。

  2. SSHコマンドを実行する

    次のようにDebianのユーザー名とIPアドレスを指定します。

Windows PowerShell
ssh USER@192.168.1.50

初回接続時は接続先の信頼性を確認するメッセージが表示されます。可能であれば、後述するサーバー側のホスト鍵フィンガープリントと一致することを確認してからyesと入力します。その後、Debianユーザーのパスワードを入力します。パスワード入力中は文字や記号が画面に表示されませんが、そのまま入力してEnterキーを押してください。

Linux・macOSから接続する

Linuxは端末、macOSは「ターミナル」を開き、Windowsと同じ形式で接続できます。

Linux・macOS
ssh USER@192.168.1.50

初回接続時のフィンガープリントを照合する

初回接続画面に表示されるED25519フィンガープリントは、Debian側で次のコマンドを実行すると確認できます。両方のSHA256:以降が一致していることを確認します。

Debian側
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

SSH接続を終了する

遠隔操作を終了するときは、接続先のプロンプトでexitを実行します。

接続先からログアウト
exit

ファイアウォールを確認する

サービスが動いているのに接続できない場合は、Debian側のファイアウォールが22番ポートへの通信を遮断していないか確認します。Debianは環境ごとに利用しているファイアウォール管理方法が異なるため、設定済みの仕組みに合わせて確認してください。

UFWを使用している場合

まず現在の状態を確認します。

UFWの状態
sudo ufw status verbose

Status: activeでSSHが許可されていない場合は、接続元を同じLAN内に限定して許可できます。次の192.168.1.0/24は一例なので、自分のネットワーク範囲に合わせて変更してください。

LAN内からのSSHだけを許可する例
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp
sudo ufw status numbered
遠隔接続中にファイアウォールを有効化しない

許可ルールを確認しないままSSH接続中にufw enableを実行すると、現在の接続や次回の接続を遮断する可能性があります。本記事の手順だけを目的として、未設定のUFWを新たに有効化する必要はありません。

nftablesを使用している場合

現在のルールを表示し、入力方向のTCP 22番ポートが拒否されていないか確認します。

nftablesルールの確認
sudo nft list ruleset

nftablesはテーブル名・チェーン名・既定ポリシーが環境によって異なります。既存設定へ無理に1行だけ追加せず、現在のルール構成を確認してから永続設定を変更してください。

公開鍵認証で安全性を高める

パスワード認証だけでもLAN内で動作確認はできますが、継続して利用するなら公開鍵認証への切り替えがおすすめです。公開鍵認証では、接続元にある秘密鍵とDebian側へ登録した公開鍵の組み合わせで認証します。

順番を守って設定する

公開鍵でログインできることを確認する前にパスワード認証を無効化すると、SSHへ入れなくなる可能性があります。現在のSSH接続は開いたままにし、別のターミナルで公開鍵ログインをテストしてください。

1. 接続元で鍵を作成する

接続元のWindows・Linux・macOSで次のコマンドを実行します。保存先を尋ねられたら、通常はEnterキーで既定値を選択できます。秘密鍵を守るため、可能ならパスフレーズも設定します。

接続元の端末
ssh-keygen -t ed25519

2. 公開鍵をDebianへ登録する

Linux・macOSなどでssh-copy-idを使用できる場合は、次のコマンドで登録できます。

Linux・macOS
ssh-copy-id USER@192.168.1.50

Windows PowerShellでssh-copy-idが見つからない場合は、次の方法で公開鍵を追記できます。

Windows PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh USER@192.168.1.50 "umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"

3. 公開鍵だけでログインできるか確認する

パスワード認証を使わない条件を指定して、新しいターミナルから接続をテストします。

公開鍵ログインのテスト
ssh -o PasswordAuthentication=no USER@192.168.1.50

鍵のパスフレーズだけでログインできれば、公開鍵の登録は完了しています。

4. rootログインとパスワード認証を無効化する

Debian側で設定用の追加ファイルを作成します。00-local-security.confという早い番号にすることで、後から読み込まれる設定との優先関係を分かりやすくします。

Debian側:設定ファイルを開く
sudo nano /etc/ssh/sshd_config.d/00-local-security.conf

次の内容を入力します。保存はCtrl+O、Enter、終了はCtrl+Xです。

/etc/ssh/sshd_config.d/00-local-security.conf
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
MaxAuthTries 3

5. 構文を確認してから再読み込みする

設定ミスでSSHが起動できなくなるのを防ぐため、必ず先に構文チェックを行います。何も表示されなければ構文上の問題はありません。

構文確認と反映
sudo /usr/sbin/sshd -t
sudo systemctl reload ssh

反映後も現在の接続はすぐに閉じず、別のターミナルから公開鍵で再接続できることを確認します。実際に適用された主な設定は次のコマンドで確認できます。

有効な設定を確認
sudo /usr/sbin/sshd -T | grep -E '^(permitrootlogin|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|maxauthtries) '
インターネット越しに使う場合

ルーターで22番ポートを直接公開するより、WireGuardなどのVPNを経由して自宅・社内LANへ入ってからSSH接続する構成を検討してください。直接公開が必要な場合は、公開鍵認証、rootログイン禁止、接続元制限、ログ監視を組み合わせます。

SSH接続できない場合の確認ポイント

エラーメッセージによって確認場所が異なります。次の表を目安に切り分けます。

表示・症状 主な原因 最初に確認すること
Connection refused SSH停止、未インストール、待受ポート違い systemctl status sshとss -lntp
Connection timed out IP間違い、ファイアウォール、別ネットワーク IPアドレス、LAN、22番ポートの許可
Permission denied ユーザー名、パスワード、公開鍵、認証設定 Debianのユーザー名とSSHログ
Host key verification failed 接続先のホスト鍵が以前と変わった 再インストール・IP重複・なりすましの有無
同じWi-Fiでも届かない ゲストWi-Fi、AP分離機能、VLAN 両端末が相互通信できる同じLANか

1. サービスと自動起動を個別に確認する

Debian側
systemctl is-active ssh
systemctl is-enabled ssh

上から順にactive、enabledと表示されるのが正常です。停止している場合は次のコマンドで起動します。

SSHを再起動
sudo /usr/sbin/sshd -t
sudo systemctl restart ssh

2. SSHのログを確認する

起動失敗や認証拒否の理由はsystemdのログで確認できます。

直近100件のSSHログ
sudo journalctl -u ssh -b -n 100 --no-pager

3. Windowsから22番ポートへの到達を確認する

Windows PowerShellでは、SSHログインを試す前にポートへ到達できるか確認できます。

Windows PowerShell
Test-NetConnection 192.168.1.50 -Port 22

TcpTestSucceeded : Trueなら、少なくとも接続元からDebianの22番ポートまでは到達しています。Falseなら、IPアドレス、LAN、ファイアウォール、SSHの待受状態を確認します。

4. 詳細な接続ログを表示する

接続元で-vvvを付けると、どの段階で失敗したかを詳しく表示できます。秘密鍵そのものは表示されませんが、共有する場合はユーザー名やIPアドレスなどを伏せてください。

接続元
ssh -vvv USER@192.168.1.50

5. ホスト鍵変更の警告が出る場合

Debianを再インストールした、または同じIPアドレスが別の端末へ割り当てられた場合は、保存済みのホスト鍵と一致しなくなることがあります。まず接続先が本当に正しいDebian端末か、サーバー側のフィンガープリントを直接確認してください。

正しい端末でホスト鍵が変更されたと確認できた場合に限り、接続元で古い情報を削除します。

接続元
ssh-keygen -R 192.168.1.50
警告を理由なく無視しない

ホスト鍵の警告は、誤った端末や第三者へ接続しようとしている場合にも表示されます。再インストールなどの明確な理由を確認できないときは、古い鍵を削除せず管理者へ確認してください。

SSHを無効にする方法

SSHを利用しなくなった場合は、サービスを停止し、自動起動も無効化できます。SSH接続中に実行すると接続が切れるため、Debian本体の画面から操作してください。

停止と自動起動の無効化
sudo systemctl disable --now ssh

SSHサーバー自体が不要なら、設定ファイルを残したままパッケージを削除できます。

OpenSSH Serverを削除
sudo apt remove openssh-server

よくある質問

SSHの標準ポート番号は何番ですか?

標準はTCP 22番です。ポート変更だけで安全になるわけではないため、まず公開鍵認証、rootログイン禁止、接続元制限を優先します。

Debianのユーザー名を確認する方法は?

Debianへログイン中のユーザー名はwhoamiで確認できます。SSHではDebianに存在する一般ユーザー名を指定します。

SSH接続後にGUI画面も遠隔操作できますか?

通常のSSHは端末操作用です。GUI全体を遠隔操作したい場合は、リモートデスクトップ用の仕組みを別途設定します。SSHのX11転送は用途と安全性を理解したうえで利用してください。

SFTPも別途インストールする必要がありますか?

Debianのopenssh-serverはopenssh-sftp-serverに依存するため、通常は同時に導入されます。SSHと同じユーザー認証を使い、SFTPクライアントからファイルを転送できます。

パスワード入力中に何も表示されません

正常な動作です。パスワード入力中は*も表示されません。入力後にEnterキーを押してください。

参考資料

まとめ

DebianでSSHを有効にする基本手順は、openssh-serverのインストール、sshサービスの起動、IPアドレスの確認、別端末からの接続という4段階です。接続できない場合は、サービス、22番ポート、IPアドレス、ファイアウォール、認証ログの順に確認すると原因を絞り込めます。

動作確認後は公開鍵認証へ移行し、rootログインとパスワード認証を無効化すると、安全性を高められます。設定を反映する前には必ずsshd -tで構文を確認し、現在の接続を残したまま別のターミナルで再接続をテストしてください。

コメントを残す

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