だからここに私のセットアップがあります:
ラップトップ -> ホスト 1 -> ホスト 2 -> ホスト 3
ラップトップはホスト 1 に到達できるが、ホスト 2 またはホスト 3
に到達できない ホスト 1 はホスト 2 に到達できるが、ホスト 3 に到達できない ホスト 3
はホスト 2 に到達できるが、ホスト 1 に到達できない
私がやろうとしているのは、リモート転送をセットアップして、ホスト 3 で実行されているプロセスがラップトップで実行されているサービスにルーティングされるようにすることです。次のコードを使用してこれを正常に実行しました。
ラップトップから実行:
require 'rubygems'
require 'net/ssh'
threads = []
config = {:user => "user", :remote_port => 3333, :service_port => 2222}
threads << Thread.new{
Net::SSH.start("host1", config[:user]) do |ssh|
puts "Forwarding port #{config[:remote_port]} on host1 to #{config[:service_port]} on localhost"
ssh.forward.remote(config[:service_port], "localhost", config[:remote_port], "127.0.0.1")
ssh.exec! "ssh #{config[:user]}@host2 -R #{config[:remote_port]}:localhost:#{config[:remote_port]}"
ssh.loop {true}
end
}
threads << Thread.new{
Net::SSH.start("host3", config[:user]) do |ssh|
puts "Creating local forward for port #{config[:service_port]} on host3 to port #{config[:remote_port]} on host2"
ssh.exec! "ssh #{config[:user]}@host2 -L #{config[:service_port]}:localhost:#{config[:remote_port]}"
ssh.loop {true}
end
}
threads.each {|t| t.join}
1 つのスレッドで、ラップトップからホスト 1 へのリモート転送を設定し、次にホスト 1 からホスト 2 への別のリモート転送を設定しています。別のスレッドで、ラップトップからホスト 3 への別の接続を開始してから、ローカルホスト 3 からホスト 2 に転送します。
ラップトップからホスト 3 に接続できる唯一の方法は、ラップトップからホスト 3 に接続しようとすると、ホスト 1 とホスト 2 を介して自動的にルーティングされる .ssh/config ファイルによるものです。
私がやりたいことは、.ssh/config ファイルへの依存関係を削除できるように、ラップトップからホスト 3 に接続している 2 番目のスレッドを切り取ることです。最初のスレッド内からすべての接続を行いたいです。
したがって、基本的に、ラップトップから発信された複数のホップを実行する必要があります。ラップトップからホスト 1 への最初の接続を開始してから、ホスト 1 でコマンドを実行できますが、その後はそれ以上進むことができません。私がする必要があるのは、ラップトップからホスト 1 への接続を開始し、ホスト 1 で転送をセットアップし、ホスト 1 からホスト 2 に接続してから、ホスト 2 で 2 番目の転送をセットアップすることです。
これは net/ssh で可能ですか?
ご協力いただきありがとうございます!