GNU/Linux >> Linux の 問題 >  >> Linux

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

解決策 1:

回路図:

    ssh       ssh
A ------> B ------> C
    ^          ^
 using A's   using B's
 ssh key     ssh key

前提条件:

  • A ssh-agent を実行しています。
  • A B にアクセスできます;
  • B C にアクセスできます;
  • A の ssh 公開鍵は B:~/.ssh/authorized_keys にあります
  • B の ssh 公開鍵は C:~/.ssh/authorized_keys にあります

~/.ssh/configA で 、追加

Host C
    ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'

B の ssh 秘密鍵が非標準の場所にある場合は、そのパスを ssh-add の後に追加します .

C にアクセスできるはずです。 A から :

A$ ssh C
C$

解決策 2:

以下が機能しているかどうかを確認してください。

ssh -t B ssh C

B に保存されているキーを使用する場合は、次のコマンドを使用します。

ssh -t B ssh -i /path/to/identity_on_B C

ここでは、コマンド、つまり ssh -i /path/to/identity_on_B C を指定しています。 ログイン シェルの代わりに B で実行されます。

解決策 3:

私は今これを解決しました。これが解決策です。これはかなり簡単です。もっと早く見ておくべきだった:

~/.ssh/config:

Host B
  HostName 1.2.3.4
  User myuser
  IdentityFile ~/.ssh/rsa_key
  ControlMaster auto
  ControlPath ~/.ssh/socket/master-%l-%[email protected]%h:%p

Host C.*
  User customer_username
  Port customer_port
  IdentityFile remote/path/to/ssh/key
  ForwardAgent yes
  ProxyCommand ssh accessable.server nc %h %p

Host C.server-1
  HostName 2.3.4.5

「B」は、ジャンプしているプロキシ サーバーです。サーバーへのアクセスを通常設定するのと同じように設定する必要があります。

「C」は宛先ホストです。接続プロセスで「B」を使用するように構成する必要があります。 「C」の ID ファイルは、「B」の ssh キーへのパスです。 ProxyCommand は、Netcat を使用して「B」から「C」への接続を開きます。 'B' には Netcat または nc をインストールする必要があります。

注 1:これを機能させるには、B の ID ファイル (通常は ~/.ssh/rd_isa) を A にコピーする必要があります。私は通常、その名前を rd_isa_B に変更します。

注 2:このソリューションは scp でも機能します。

これが他の人に役立つことを願っています。

解決策 4:

基本的に、リモート インスタンスの ssh キーを一覧表示し、選択したキーをローカルの ssh エージェントに追加する簡単なスクリプトを作成しました。これはあまりクリーンではありませんが、ローカルではなくリモートの場所にすべてのキーを保持できます。

興味のある方は、スクリプトをご覧ください:

#!/usr/bin/ruby

require "rubygems"
require "fileutils"

# Get key list
key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/  /g' | sed     's/id_rsa//g'`)
puts ' '
puts 'Available customer keys:'
puts key_list

# Get customer name input
puts ' '
puts 'Enter customer name: '
customer_name = gets.chomp

# Add key to ssh-agent
key_name = "~/.ssh/id_rsa_#{customer_name}"
puts ' '
puts "Adding #{key_name} to local ssh-agent"
`ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"`
exit 0

解決策 5:

スノーボールの答えは大いに役立ちました。ただし、コマンドにいくつかの変更を加えたので、それがどのように機能するかを説明したいと思いました。この状況を考えると:

    ssh        ssh
A -------> B -------> C
     ^          ^
  using A's  using B's
  ssh key    ssh key

~/.ssh/config を変更します ファイルを開き、ホスト B を追加します ジャンプしたい場所、通常のホストの構成方法:

Host B
 User myusername
 HostName b.mycompany.com

次に、ホスト C を追加します あなたが最終的にしたいこと:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'

ProxyCommand に注意してください 、ここで:

  • ssh -T -q 疑似 TTY (-T) を割り当てる必要がないことを示します。 ) 静かにしてください (-q );
  • ジャンプ ホスト B で一度 、 A の SSH キーにキーを追加します ssh-add まで;
  • これは、-o 'ForwardAgent yes' を使用して SSH エージェントを転送したためにのみ機能します .
  • ssh-add -t 1 最終ホスト C への認証に必要な 1 秒間だけキーを追加することを示します;
  • そして最後に nc %h %p netcat を開始します 最終ホスト %h への接続 ポート %p で (両方とも ~/.ssh/config の情報に基づいて SSH によって入力されます) ファイル)

B でカスタム キーを指定する必要がある場合 ssh-add を変更することで使用できます。 一部:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'

Linux
  1. SSHを使用してサーバーからファイルをダウンロードするには?

  2. jq を使用して json 出力からキー値をフェッチする

  3. RSA を使用して暗号化された暗号文から復号化する

  1. 公開鍵と秘密鍵のペアを使用したパスワードなしのSSH

  2. Ssh – Sshを使用して別のPCを介してPCに接続する方法は?

  3. 複数のマシンで同じ SSH 秘密鍵を使用する

  1. Ssh –プライベートSshキーが与えられた場合、公開キーを回復するにはどうすればよいですか?

  2. Ssh秘密鍵から公開鍵を取得する方法は?

  3. LinuxまたはMacOSXでSSHを使用してサーバーに接続します