web-dev-qa-db-ja.com

エージェント転送なしのSSHジャンプホスト

簡単な質問ですが、私は成功しない日を探しました。

M = My machine 
J = Jump Host
S = Server

Jump Host has my public key on authorized_keys.
Server has J's public key on authorized_keys.

Allowed connections (due to key authentication):
M -> J
J -> S

自分のマシンからSにSSH接続することはどのように可能ですか?

私の現在の構成は次のとおりです。

Host jump
  user root
  HostName x.x.x.x

Host server
  user root
  HostName x.x.x.x
  port 22
  ForwardAgent no
  ProxyCommand ssh jump -W %h:%p

Mのキーでログインしようとするので動作しません。

これがsshログです

debug1: Host 'x.x.x.x' is known and matches the ECDSA Host key.
debug1: Found key in /Users/xxxxx/.ssh/known_hosts:1542
...
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/xxxxx/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/xxxxx/.ssh/id_dsa
debug1: Trying private key: /Users/xxxxx/.ssh/id_ecdsa
debug1: Trying private key: /Users/xxxxx/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).
Killed by signal 1.

問題は、Jのキーを使用することになっているときに、Sで認証するために私のキー(M)を使用しようとしていることです。 IdentityFileで使用するキーを指定できません。これは、自分のマシンではなくJにあります。

それがあなたの問題です。この設定では、ジャンプホストと最終宛先の両方への接続がクライアントから直接開始されます。クライアントは、両方のシステムに対して正しいキーを持っている必要があります。

ssh jump -W %h:%pプロキシコマンドでジャンプホストへのsshセッションを開始しますが、シェルは作成せず、宛先ホストへのトンネルを直接作成します。次に、クライアントはトンネルにsshを作成します。このタイプのセットアップでその中間ホストに格納されているキーにアクセスできるようにするシェルがジャンプホストで開始されることはありません。転送をいじっても何も起こりません。接続を開始するために転送は使用されません。

1
Zoredache

ファイアウォールにログインしません。ファイアウォールは、パケットを制限するネットワークアプライアンスです。このシナリオでは基本的に見えません。パケットが要塞ホスト(ジャンプホスト)サーバーに到達できるように構成する必要があります。このサーバーは、ポート22が入力され、おそらく高範囲のポートが出力されます。

サーバーに直接ログインするため、これを許可するようにサーバーを構成する必要があります。同じネットワーク上の別のマシンからこれをテストします。この要塞ホストから、プライベートサブネットで保護されているマシンにログインできます。

詳細情報に基づいて更新ターゲットサーバーに要塞/ジャンプホストキーは必要ありません。キーが必要です。サーバーにアクセスしようとしているのは要塞ではなく、ユーザー、つまりあなたです。

下がってください。キーを使用して、同じサブネット内の別のサーバーからsshを使用してターゲットサーバーにアクセスできることを確認してください。次に、要塞ホストから試してください。

1
Tim