Tutoriel Linux

SSHをLinuxでのサーバー設定をすべて再入力せずに行う

Débutant2 min de lecture

複数のマシンを管理する場合、同じSSHオプションが履歴にすぐに溜まってしまいます:ユーザー、ポート、秘密鍵、時には中継もあります。ファイル ~/.ssh/config は、この長い行を短い名前に置き換えます。例えば ssh preprod です。

サーバーを変更する必要はありません。この設定はあなたのコンピュータ上に存在し、クライアント OpenSSH に各マシンに接続する方法を指示します。特に、複数の環境が似ているときに、誤った鍵やポートを使用するのを防ぎます。

サーバーごとにエントリを作成する

フォルダが存在しない場合は作成し、設定ファイルを開きます:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/config

次に、各マシンごとにブロックを追加します。ここでは preprod は単なるローカルエイリアスです。アドレス、アカウント、ポート、鍵のパスをあなたの値に置き換えてください。

Host preprod
    HostName 192.0.2.44
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_preprod
    IdentitiesOnly yes

その後、ssh preprod を実行できます。HostName には本当のDNS名またはIPアドレスが含まれ、User にはリモートアカウント、Port にはSSHポートが含まれます。IdentityFile では期待される秘密鍵を選択します。IdentitiesOnly yes を使うと、クライアントはSSHエージェントによって読み込まれるすべての鍵を提案せず、認証を制限するサーバーでの不必要な試行を避けます。

すでに鍵を使用している場合は、まずそれが適切に保護されていることを確認してください。秘密鍵はあなたのコンピュータの他のアカウントから読み取れるべきではありません:

chmod 600 ~/.ssh/id_ed25519_preprod
chmod 600 ~/.ssh/config

Ubuntuでの SSH鍵生成 に関するガイドでは、鍵ペアの作成が説明されています。秘密鍵をサーバーにコピーしてはいけません。~/.ssh/authorized_keys に配置されるのは公開鍵のみです。

ファイルの最後に共通設定を追加する

config ファイルには複数の Host ブロックを含むことができます。OpenSSHクライアントはほとんどのオプションについて、最初に見つけた値を保持します。したがって、最も特定的なサーバーを上に置き、一般的な値を最後に配置しましょう。

Host production
    HostName prod.example.net
    User deploy
    IdentityFile ~/.ssh/id_ed25519_production
    IdentitiesOnly yes

Host sauvegarde
    HostName backup.example.net
    User backup
    Port 2201
    IdentityFile ~/.ssh/id_ed25519_backup
    IdentitiesOnly yes

Host *
    ServerAliveInterval 30
    ServerAliveCountMax 3

Host * ブロックはすべてのエイリアスに適用されます。本当の共通設定に適しています。ここでは、フリーズした接続を検出するために定期的に信号を送ることです。すべてのサーバーが同じアカウントを使用していない場合は、鍵やユーザーをそこに配置しないでください。

同じルールに従うホストを、Host *.intra のようなパターンでグループ化することもできます。例外はこのブロックの上に置いてください。あいまいなエイリアスまたは早すぎる場所に配置された一般的なルールは、しばしば予期しない挙動を引き起こします。

接続前に設定を確認する

次のコマンドは、エイリアスについて計算された最終設定を表示し、セッションを開くことはありません。変更後に非常に便利です:

ssh -G preprod | grep -E '^(hostname|user|port|identityfile|identitiesonly) '

hostnameuser、および port が対象のマシンに一致していることを確認してください。返された identityfile のパスも確認してください。鍵を移動したばかりの場合、SSHはまだ古いファイルを指している可能性があります。

次に、簡単なテストを行います:

ssh preprod
ssh -v preprod

-v オプションは接続のステップと読み込まれた設定ファイルを表示します。この出力をそのままチケットやチャットに公開しないでください:ホスト名、アカウント、ローカルなパスが明らかになる可能性があります。

configファイルが不十分な場合

SSHエイリアスは、オプションの繰り返しを解決します。しかし、それはあなたの鍵を拒否するサーバー、閉じたポート、または変更されたホストフィンガープリントを修正するものではありません。認証が頻繁にパスフレーズを再要求する場合は、ssh-agent を使用し、鍵からパスフレーズを削除するのではなく、そのまま使ってください。

ボスチャンを介して内部サービスに到達するには、ProxyJump を使用して別のエントリを保持し、別々にテストしてください。SSHトンネル は別のニーズに応えます:それはローカルまたはリモートのポートを透過させるもので、ホストの設定を置き換えるものではありません。

  • ~/.sshchmod 700 ~/.ssh で保護してください。
  • config ファイルと各秘密鍵を chmod 600 で保護してください。
  • 初めて接続する前に、ssh -G nom_alias でエイリアスを確認してください。
  • 各新しいサーバーをそのエイリアスでテストし、共通オプションはファイルの下部に配置された Host * ブロックに保持してください。

公式ドキュメント ssh_config(5) は各指示を詳述しています。本番マシンでエイリアスを使用する前に、ssh -G の出力を再確認するために2分かけてください:SSHが間違った鍵を選んだ理由を探すよりも速いです。

複数のサーバーにSSH設定を行ったLinuxコンピュータ
ローカルSSH設定により、各サーバーに専用エイリアスで接続できます。
sudo apt update && sudo apt upgrade