web-dev-qa-db-ja.com

Aの秘密鍵を使用して、AからBを介してCにSSH接続します。

これらは私のシナリオです:

  • ホストCはAからアクセスできません。
  • ホストBはAからアクセスできます。
  • ホストCはBからアクセスできます。
  • BとCの両方に~/.ssh/id_rsa.pub(Aから)authorized_keys
  • Bには秘密鍵がありません(~/.ssh/id_rsa)、これはセキュリティリスクになるためです(キーは個人用です)。
  • bには秘密鍵がないので、そこからCにログインすることはできません。

ホストAのキーを使用してホストCにログインするにはどうすればよいですか?これは可能ですか?私は恐れていません。

この質問と似ていますが異なります

編集する

私が必要とするのは、Bのファイルシステムに触れることなく、Bのsshホップにオンザフライ(stdinまたは類似)で秘密鍵を提供する方法です。これは可能ですか?

4
dangonfast

OpenSSHの最新バージョンを使用している場合は、次のように入力するだけです。

ssh -J B C

-Jサポートのない少し古いバージョンを使用している場合は、少し複雑な構文を使用できます。

ssh -o ProxyCommand='ssh -W %h:%p B' C

AからCにsshするたびにこれが必要な場合は、.ssh/configファイルに次のようなエントリを追加すると便利です(最近のバージョン):

Host C
   ProxyJump B

またはこのように(少し古いバージョンでは):

Host C
   ProxyCommand ssh -W %h:%p B

上記のいずれかを使用すると、単にssh Cと入力して接続を開くことができます。これは、転送にsshを利用する多くのツールの1つを介してsshを間接的に使用している場合に特に便利です。これらのツールのすべてが、コマンドラインフラグをsshコマンドに渡す簡単な方法を提供しているわけではありません。

6
kasperd

それはかなり簡単です。エージェント転送(sshの-Aオプション)を使用するだけです。

サンプル:

#On machine A use
ssh -A user@<machine_B>
#Then on machine B use
ssh -A user@<machine_C>

秘密鍵をあちこちにコピーする必要はありません。 -AはSSHエージェント要求のみをチェーンの最初のマシンに転送するため、中間マシンのユーザーを切り替えない限り、マシンAの秘密鍵を使用できます。

マシンBでユーザーを変更すると(たとえば、su fooからユーザーfooへ)、エージェントの転送は機能しなくなります。これは、次の接続がユーザーfooとして独自のキーで行われるためです。

0
Marcel1980