Jawaban Snowball sangat membantu. Namun, saya membuat beberapa modifikasi pada perintah 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
file Anda dan tambahkan host B
yang ingin Anda lompati, seperti biasanya Anda mengkonfigurasi host:
Host B
User myusername
HostName b.mycompany.com
Kemudian Anda menambahkan host C
yang Anda ingin berakhir pada:
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 ia tidak boleh mengalokasikan pseudo-TTY ( -T
) dan diam ( -q
);
- sekali pada host lompat
B
, kami menambahkan kunci ke kunci SSH A
melalui ssh-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 akhirnya,
nc %h %p
memulai netcat
koneksi ke host terakhir %h
di port %p
(keduanya akan diisi oleh SSH berdasarkan informasi dalam ~/.ssh/config
file).
Jika Anda perlu menentukan kunci khusus 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'