SSH経由で複数のリモートシステムに定期的に接続している場合、すべてのリモートIPアドレス、異なるユーザー名、非標準ポート、およびさまざまなコマンドラインオプションを覚えておくのは、不可能ではないにしても難しいことに気付くでしょう。
1つのオプションは、リモートサーバー接続ごとにbashエイリアスを作成することです。ただし、この問題には、もう1つ、はるかに優れた、より簡単な解決策があります。 OpenSSHを使用すると、接続するリモートマシンごとに異なるSSHオプションを保存できるユーザーごとの構成ファイルを設定できます。
この記事では、SSHクライアント構成ファイルの基本について説明し、最も一般的な構成オプションのいくつかについて説明します。
前提条件#
LinuxまたはOpenSSHクライアントがインストールされたmacOSシステムを使用していることを前提としています。
SSH構成ファイルの場所#
OpenSSHクライアント側構成ファイルの名前はconfig
です。 、および .ssh
に保存されます ユーザーのホームディレクトリの下にあるディレクトリ。
〜/ .ssh
ユーザーがssh
を実行すると、ディレクトリが自動的に作成されます 初めてのコマンド。システムにディレクトリが存在しない場合は、次のコマンドを使用してディレクトリを作成します。
mkdir -p ~/.ssh && chmod 700 ~/.ssh
デフォルトでは、SSH構成ファイルが存在しない可能性があるため、 touch
を使用して作成する必要がある場合があります。 コマンド:
touch ~/.ssh/config
このファイルは、ユーザーのみが読み取りおよび書き込み可能であり、他のユーザーがアクセスできないようにする必要があります。
chmod 600 ~/.ssh/config
SSH構成ファイルの構造とパターン#
SSH構成ファイルは次の構造を取ります:
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value
SSHクライアント構成ファイルの内容は、スタンザ(セクション)に編成されています。各スタンザはHost
で始まります ディレクティブであり、リモートSSHサーバーとの接続を確立するときに使用される特定のSSHオプションが含まれています。
インデントは必須ではありませんが、ファイルが読みやすくなるため、インデントをお勧めします。
ホスト
ディレクティブには、1つのパターンまたは空白で区切られたパターンのリストを含めることができます。各パターンには、0個以上の非空白文字、または次のパターン指定子の1つを含めることができます。
-
*
-0文字以上に一致します。たとえば、Host *
192.168.0。*
の間、すべてのホストに一致します192.168.0.0/24
のホストと一致します サブネット。 -
?コード> -1文字に完全に一致します。パターン
Host10.10.0.?
10.10.0。[0-9]
のすべてのホストに一致します 範囲。 -
!コード> -パターンの先頭で使用すると、一致が無効になります。たとえば、
Host 10.10.0。*!10.10.0.5
10.10.0.0/ 24
内の任意のホストと一致します10.10.10.5
を除くサブネット 。
SSHクライアントは、構成ファイルのスタンザをスタンザごとに読み取ります。複数のパターンが一致する場合は、最初に一致したスタンザのオプションが優先されます。したがって、より多くのホスト固有の宣言をファイルの先頭に指定し、より一般的なオーバーライドをファイルの末尾に指定する必要があります。
man ssh_config
と入力すると、使用可能なsshオプションの完全なリストを見つけることができます。 ターミナルで、またはssh_configのマニュアルページにアクセスします。
SSH構成ファイルは、 scp
などの他のプログラムによっても読み取られます。 、 sftp
、および rsync
。
SSH構成ファイルの例#
SSH構成ファイルの基本について説明したので、次の例を見てみましょう。
通常、SSH経由でリモートサーバーに接続する場合は、リモートユーザー名、ホスト名、およびポートを指定します。たとえば、 john
という名前のユーザーとしてログインするには dev.example.com
というホストに ポート2322
コマンドラインから次のように入力します:
ssh [email protected] -p 2322
上記のコマンドで提供されたものと同じオプションを使用してサーバーに接続するには、 ssh dev
と入力するだけです。 、次の行を "〜/ .ssh / config
に追加します ファイル:
Host dev
HostName dev.example.com
User john
Port 2322
ここで、 ssh dev
と入力すると 、sshクライアントは構成ファイルを読み取り、 dev
に指定されている接続の詳細を使用します ホスト:
ssh dev
この例では、ホストパターンとオプションの優先順位に関する詳細情報を提供します。
次のサンプルファイルを見てみましょう:
Host targaryen
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
Host tyrell
HostName 192.168.10.20
Host martell
HostName 192.168.10.50
Host *ell
user oberyn
Host * !martell
LogLevel INFO
Host *
User root
Compression yes
-
ssh targaryen
と入力すると 、sshクライアントはファイルを読み取り、最初に一致したHost targaryen
からオプションを適用します。 。次に、一致するパターンがないか、次のスタンザを1つずつチェックします。次に一致するのはHost*!martell
です。 (martell
を除くすべてのホストを意味します )、このスタンザからの接続オプションを適用します。最後の定義Host*
も一致しますが、sshクライアントはCompression
のみを使用しますUser
のためのオプション オプションはHosttargaryen
ですでに定義されています スタンザ。ssh targaryen
と入力するときに使用されるオプションの完全なリスト は次のとおりです:HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
-
ssh tyrell
を実行している場合 一致するホストパターンは次のとおりです。Hosttyrell
、Host * ell
、Host *!martell
およびHost*
。この場合に使用されるオプションは次のとおりです。HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
-
ssh martell
を実行する場合 、一致するホストパターンは次のとおりです。Host martell
、Host * ell
およびHost*
。この場合に使用されるオプションは次のとおりです。HostName 192.168.10.50 User oberyn Compression yes
-
他のすべての接続では、sshクライアントは
Host *!martell
で指定されたオプションを使用します およびHost*
セクション。
SSH構成ファイルオプション#を上書きする
sshクライアントは、次の優先順位で構成を読み取ります。
- コマンドラインから指定されたオプション。
-
〜/ .ssh / config
で定義されているオプション 。 -
/ etc / ssh / ssh_config
で定義されているオプション 。
単一のオプションをオーバーライドする場合は、コマンドラインで指定できます。たとえば、次の定義がある場合:
Host dev
HostName dev.example.com
User john
Port 2322
他のすべてのオプションを使用したいが、ユーザー root
として接続したい john
の代わりに コマンドラインでユーザーを指定するだけです:
ssh -o "User=root" dev
-F
( configfile
)オプションを使用すると、代替のユーザーごとの構成ファイルを指定できます。
ssh
に伝えるには クライアントがssh構成ファイルで指定されたすべてのオプションを無視するには、次を使用します。
ssh -F /dev/null [email protected]
結論#
ユーザーのssh構成ファイルを構成する方法を説明しました。 SSHキーベースの認証を設定し、パスワードを入力せずにLinuxサーバーに接続することもできます。
デフォルトでは、SSHはポート22でリッスンします。デフォルトのSSHポートを変更すると、自動攻撃のリスクが軽減されるため、サーバーのセキュリティがさらに強化されます。
ご不明な点がございましたら、下にコメントを残してください。