Solusi 1:
Skema:
ssh ssh
A ------> B ------> C
^ ^
using A's using B's
ssh key ssh key
Prasyarat:
A
sedang menjalankan ssh-agent;A
dapat mengaksesB
;B
dapat mengaksesC
;A
kunci publik ssh ada diB:~/.ssh/authorized_keys
B
kunci publik ssh ada diC:~/.ssh/authorized_keys
Di ~/.ssh/config
pada A
, tambahkan
Host C
ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'
Jika kunci pribadi ssh Anda di B berada di lokasi yang tidak standar, tambahkan jalurnya setelah ssh-add
.
Anda seharusnya sekarang dapat mengakses C
dari A
:
A$ ssh C
C$
Solusi 2:
Periksa apakah mengikuti berfungsi.
ssh -t B ssh C
Gunakan perintah berikut jika Anda ingin menggunakan kunci yang disimpan di B.
ssh -t B ssh -i /path/to/identity_on_B C
Di sini kita menentukan perintah yaitu ssh -i /path/to/identity_on_B C
untuk dieksekusi di B alih-alih shell login.
Solusi 3:
Saya sudah menyelesaikan ini sekarang. Inilah solusinya, yang agak mudah. Saya seharusnya melihatnya lebih awal:
~/.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' adalah server Proksi yang Anda lewati. Itu harus dikonfigurasi seperti biasanya Anda mengonfigurasi akses ke server.
'C' adalah host tujuan. Perlu dikonfigurasi untuk menggunakan 'B' dalam proses koneksi. File identitas di 'C' adalah jalur ke kunci ssh di 'B'. ProxyCommand menggunakan Netcat untuk membuka koneksi ke 'C' dari 'B'. Netcat, atau nc, perlu dipasang di 'B'.
NOTE1:Agar ini berfungsi, Anda perlu menyalin file identitas B (biasanya ~/.ssh/rd_isa) ke A. Saya biasanya mengubah namanya menjadi rd_isa_B.
NOTE2:Solusi ini juga berfungsi untuk scp.
Semoga ini bisa membantu orang lain.
Solusi 4:
Saya menulis skrip sederhana untuk mencantumkan kunci ssh saya pada contoh jarak jauh, dan kemudian menambahkan yang saya pilih ke agen ssh lokal saya. Ini tidak terlalu bersih, tetapi memungkinkan saya untuk menyimpan semua kunci di lokasi yang jauh daripada secara lokal.
Berikut skripnya jika ada yang tertarik:
#!/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
Solusi 5:
Jawaban Snowball sangat membantu. Namun, saya membuat beberapa modifikasi pada perintah tersebut dan ingin menjelaskan cara kerjanya. Mengingat situasi ini:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Ubah ~/.ssh/config
Anda file dan tambahkan host B
yang ingin Anda lompati, seperti biasanya Anda mengonfigurasi host:
Host B
User myusername
HostName b.mycompany.com
Kemudian Anda menambahkan host C
yang ingin Anda tuju:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'
Perhatikan ProxyCommand
, di mana:
ssh -T -q
menunjukkan bahwa seharusnya tidak mengalokasikan pseudo-TTY (-T
) dan diam (-q
);- sekali pada jump host
B
, kami menambahkan kunci ke kunci SSH dariA
melaluissh-add
; - yang hanya berfungsi karena kami meneruskan agen SSH menggunakan
-o 'ForwardAgent yes'
. ssh-add -t 1
menunjukkan bahwa saya ingin kunci ditambahkan hanya untuk 1 detik yang diperlukan untuk mengautentikasi ke host terakhir C;- dan terakhir,
nc %h %p
menginisiasinetcat
koneksi ke host terakhir%h
di port%p
(keduanya akan diisi oleh SSH berdasarkan informasi di~/.ssh/config
berkas).
Jika Anda perlu menentukan kunci khusus pada B
untuk digunakan, Anda dapat melakukannya dengan memodifikasi ssh-add
bagian:
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'