Câu trả lời của Snowball đã giúp rất nhiều. Tuy nhiên, tôi đã thực hiện một số sửa đổi cho lệnh và muốn giải thích cách thức hoạt động của nó. Đưa ra tình huống này:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Sửa đổi ~/.ssh/configtệp của bạn và thêm máy chủ Bmà bạn muốn nhảy qua, giống như cách bạn thường định cấu hình máy chủ:
Host B
User myusername
HostName b.mycompany.com
Sau đó, bạn thêm máy chủ Cmà bạn muốn kết thú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'
Lưu ý ProxyCommand, trong đó:
ssh -T -qchỉ ra rằng nó không nên phân bổ giả TTY ( -T) và im lặng ( -q);
- một lần trên máy chủ nhảy
B, chúng tôi thêm khóa vào các khóa SSH Athông qua ssh-add;
- chỉ hoạt động vì chúng tôi đã chuyển tiếp tác nhân SSH bằng cách sử dụng
-o 'ForwardAgent yes'.
ssh-add -t 1 chỉ ra rằng tôi muốn khóa chỉ được thêm trong 1 giây để xác thực với máy chủ C cuối cùng;
- và cuối cùng,
nc %h %pbắt đầu một netcatkết nối đến máy chủ cuối cùng %htại cổng %p(cả hai sẽ được điền bởi SSH dựa trên thông tin trong ~/.ssh/configtệp).
Nếu bạn cần chỉ định một khóa tùy chỉnh Bđể sử dụng, bạn có thể làm điều đó bằng cách sửa đổi ssh-addphần:
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'