ファイアウォールの背後に2台のマシンがあり、sshポートが2201と2202に転送されています。
私が
ssh Host -p 2201
私はマシンを信頼するかどうかを尋ねます、私はそう言います、それは〜/ .ssh/known_hostsに追加されます
その後私は
ssh Host -p 2202
~/.ssh/known_Host:1
にこのIPのエントリが既にあるため、許可されません(開始時にファイルが空だったため、1行目は前回のssh実行で追加されたものです)。
これはCentOS 5.4で発生します。
他のディストリビューション(私はArchを試してみました)では、sshがknown_hostsをポートに一致させるように見えるため、同じホスト/ IPの複数のポートに複数のフィンガープリントを問題なく取得できます。
CentOSでこれと同じ動作を得るにはどうすればよいですか?
man ssh_config
には何も見つかりませんでした(または少なくとも指紋チェックを無効にしない限り)。
一時的な解決策を見つけました。 known_hosts
ファイルに同じIPのエントリが複数ある場合、何かが間違っていると結論する前に、それらすべてをチェックします。しかし、私はこれが解決策であることを本当に嫌っています。
CentOS 5に付属するバージョンのOpenSSHは、known_hosts
のポート番号をサポートしていません。これを機能させるには、新しいバージョンをビルドしてインストールする必要があります。
~/.ssh/config
:
ホストfoohost-2201 ホスト名foohost.domain.tld #これは、OpenSSH 5で使用される形式に準拠している必要があります。 HostkeyAlias "[foohost.domain.tld ]:2201 " ユーザーユーザー名 ポート2201
そして真剣に、アップグレードします。
OpensshクライアントがHost + portベースのエントリをサポートしていない場合は、これを使用します。
ディレクティブ 'GlobalKnownHostsFile'はmisusedにして、ファイアウォールで保護された2台のマシン(ここではアリスとボブ)のそれぞれに異なるファイルを指定することができます。ただし、これらの2つのファイルは不明なキーを受け入れるときに書き込まれないため、事前にaliceまたはbobのいずれかの正しいホストキーを使用して準備する必要があります。
設定するのは本当に楽しいことではありませんが、一度設定すると機能します。
これまでの私の回避策は 'StrictHostKeyChecking no'で、ssh-agentがキーを転送したり、ポートを転送したりできません(opensshを使用するとブロックされます)。
私の.ssh/configは最近までこのように見えました:
Host hoppingstation
Hostname loginhost.somewhere.net
User me
LocalForward 2201 alice.somewhere.net:22
LocalForward 2202 bob.somewhere.net:22
Host alice
Hostname localhost
Port 2201
User root
ForwardAgent yes
GlobalKnownHostsFile /home/me/.ssh/known_hosts_alice
Host bob
Hostname localhost
Port 2202
User root
ForwardAgent yes
GlobalKnownHostsFile /home/me/.ssh/known_hosts_bob
私の解決策;詳細なホスト情報を~/.ssh/config
に追加します。
Host <someidentifier>
Hostname ip.add.re.ss
StrictHostKeyChecking no
User username
Port 2201
Host <someotheridentifier>
Hostname ip.add.re.ss
StrictHostKeyChecking no
User username
Port 2202
その後、ssh someidentifier
などを指定しなくても-p
を実行できます。