DebianでSSHを有効にする方法
Debianを別のパソコンから遠隔操作したい場合は、Debian側にopenssh-serverをインストールし、SSHサービスを起動します。本記事ではDebian 13を例に、インストールからWindows・Linux・macOSでの接続確認、安全性を高める設定まで順番に解説します。
コマンド内のUSERはDebianの実際のユーザー名、192.168.1.50はDebianに割り当てられた実際のIPアドレスへ置き換えてください。最初は同じ家庭内・社内LANに接続した端末から試すと確認しやすくなります。
最短手順
- Debianで
openssh-serverをインストールする sshサービスを有効化・起動する- DebianのIPアドレスを確認する
- 別の端末から
ssh USER@IPアドレスで接続する
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をインストールします。
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サービスは動作しています。画面を閉じる必要はありません。
active (running)ならSSHサービスは起動している22番ポートで待ち受けていることも確認しておくと、切り分けがしやすくなります。
sudo ss -lntp | grep ':22'
0.0.0.0:22や[::]:22を含む行が表示されれば、SSHサーバーは標準の22番ポートで接続を待っています。
DebianのIPアドレスを確認する
接続先として指定するDebianの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アドレスは、再起動などで変わる場合があります。継続的にSSH接続するなら、ルーターのDHCP固定割り当て機能を使用すると管理しやすくなります。
別の端末からSSH接続する
ここからのコマンドは、SSHを有効にしたDebianではなく、Debianへ接続したい別のパソコンで実行します。
Windows 11・Windows 10から接続する
-
PowerShellまたはWindows Terminalを開く
スタートボタンを右クリックし、「ターミナル」または「PowerShell」を選びます。
-
SSHコマンドを実行する
次のようにDebianのユーザー名とIPアドレスを指定します。
ssh USER@192.168.1.50
初回接続時は接続先の信頼性を確認するメッセージが表示されます。可能であれば、後述するサーバー側のホスト鍵フィンガープリントと一致することを確認してからyesと入力します。その後、Debianユーザーのパスワードを入力します。パスワード入力中は文字や記号が画面に表示されませんが、そのまま入力してEnterキーを押してください。
USER@debianへ変われば接続成功Linux・macOSから接続する
Linuxは端末、macOSは「ターミナル」を開き、Windowsと同じ形式で接続できます。
ssh USER@192.168.1.50
初回接続時のフィンガープリントを照合する
初回接続画面に表示されるED25519フィンガープリントは、Debian側で次のコマンドを実行すると確認できます。両方のSHA256:以降が一致していることを確認します。
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
SSH接続を終了する
遠隔操作を終了するときは、接続先のプロンプトでexitを実行します。
exit
ファイアウォールを確認する
サービスが動いているのに接続できない場合は、Debian側のファイアウォールが22番ポートへの通信を遮断していないか確認します。Debianは環境ごとに利用しているファイアウォール管理方法が異なるため、設定済みの仕組みに合わせて確認してください。
UFWを使用している場合
まず現在の状態を確認します。
sudo ufw status verbose
Status: activeでSSHが許可されていない場合は、接続元を同じLAN内に限定して許可できます。次の192.168.1.0/24は一例なので、自分のネットワーク範囲に合わせて変更してください。
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番ポートが拒否されていないか確認します。
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を使用できる場合は、次のコマンドで登録できます。
ssh-copy-id USER@192.168.1.50
Windows PowerShellでssh-copy-idが見つからない場合は、次の方法で公開鍵を追記できます。
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という早い番号にすることで、後から読み込まれる設定との優先関係を分かりやすくします。
sudo nano /etc/ssh/sshd_config.d/00-local-security.conf
次の内容を入力します。保存はCtrl+O、Enter、終了はCtrl+Xです。
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. サービスと自動起動を個別に確認する
systemctl is-active ssh
systemctl is-enabled ssh
上から順にactive、enabledと表示されるのが正常です。停止している場合は次のコマンドで起動します。
sudo /usr/sbin/sshd -t
sudo systemctl restart ssh
2. SSHのログを確認する
起動失敗や認証拒否の理由はsystemdのログで確認できます。
sudo journalctl -u ssh -b -n 100 --no-pager
3. Windowsから22番ポートへの到達を確認する
Windows PowerShellでは、SSHログインを試す前にポートへ到達できるか確認できます。
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サーバー自体が不要なら、設定ファイルを残したままパッケージを削除できます。
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 Packages:openssh-server(Debian 13 trixie)
- Debian Reference:The remote access server and utilities (SSH)
- Debian Manpages:sshd_config(5)
まとめ
DebianでSSHを有効にする基本手順は、openssh-serverのインストール、sshサービスの起動、IPアドレスの確認、別端末からの接続という4段階です。接続できない場合は、サービス、22番ポート、IPアドレス、ファイアウォール、認証ログの順に確認すると原因を絞り込めます。
動作確認後は公開鍵認証へ移行し、rootログインとパスワード認証を無効化すると、安全性を高められます。設定を反映する前には必ずsshd -tで構文を確認し、現在の接続を残したまま別のターミナルで再接続をテストしてください。
