~/.ssh/config ホスト名と /etc/hosts が競合する場合、何が優先されますか?

~/.ssh/config ホスト名と /etc/hosts が競合する場合、何が優先されますか?

ホストが次のように定義されている場合/etc/hosts

192.168.0.100   server

1は次のように定義されます~/.ssh/config

 Host    server
         HostName    192.168.0.101

次にサーバーにsshを接続しますssh server

そのような紛争を解決するには?一方が他方より優先順位が高いようです。

答え1

これにより、ssh serverサーバー部分はおそらく実際のホスト名であるか、一部のSSH内部の「別名」になります。 sshは最初に.ssh / configでいくつかの別名を見つけ、そこで設定を見つけたらそれを使用します。設定が見つからない場合は、実際のホスト名を想定して/etc/hostとdnsを介して解決を試みます。

答え2

このファイル~/.ssh/config/etc/hosts。代わりにssh存在する場合に使用できる設定ファイルです。

ssh他の作業を実行する前に、verboseスイッチを使用してファイルが参照-vされていることを確認できますssh

~/.ssh/configのホストエントリ

ここに私のファイルに~/.ssh/config「skinner」というサーバーエントリがあります。-v3を含むスイッチを介してデバッグレベル3を有効にします。

はい
$ ssh -vvv skinner 
OpenSSH_6.2p2, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/saml/.ssh/config
debug1: /home/saml/.ssh/config line 8: Applying options for *
debug1: /home/saml/.ssh/config line 35: Applying options for skinner
debug1: /home/saml/.ssh/config line 55: Applying options for *
debug3: cipher ok: arcfour [arcfour,blowfish-cbc]
debug3: cipher ok: blowfish-cbc [arcfour,blowfish-cbc]
debug3: ciphers ok: [arcfour,blowfish-cbc]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 50: Applying options for *
debug1: auto-mux: Trying existing master
...

ssh上記では、システムの名前解決機能を参照せずにこの定義が使用されていることがわかります。

~/.ssh/config にホストエントリがありません。

~/.ssh/configファイルに対応するエントリがない場合は、ssh指定されたホスト名に接続する方法を調べるために、システムのDNS解決を問い合わせます。

はい
$ ssh -vvv skinner
OpenSSH_6.2p2, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/saml/.ssh/config
debug1: /home/saml/.ssh/config line 8: Applying options for *
debug1: /home/saml/.ssh/config line 55: Applying options for *
debug3: cipher ok: arcfour [arcfour,blowfish-cbc]
debug3: cipher ok: blowfish-cbc [arcfour,blowfish-cbc]
debug3: ciphers ok: [arcfour,blowfish-cbc]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 50: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/saml/.ssh/master-saml@skinner:22" does not exist
debug2: ssh_connect: needpriv 0
debug1: Connecting to skinner [192.168.1.3] port 22.
debug1: Connection established.

sshここでは、ホスト名 "skinner"のIPアドレスを見つけるためにシステムが参照されていることがわかります。

メモ:getent以下を使用して、システム上のホスト名を見つけることができます。

$ getent hosts skinner
192.168.1.3     skinner.dom.net

答え3

通常、Unixソフトウェアの場合、ユーザー固有の設定(この場合~/.ssh/config)はシステム全体の設定(この場合/etc/hosts)よりも優先されます。したがって、 の設定が~/.ssh/configより高い優先順位を持ちます。

関連情報