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/config
tệp của bạn và thêm máy chủ B
mà 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ủ C
mà 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 -q
chỉ 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 A
thô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 %p
bắt đầu một netcat
kết nối đến máy chủ cuối cùng %h
tại cổng %p
(cả hai sẽ được điền bởi SSH dựa trên thông tin trong ~/.ssh/config
tệ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-add
phầ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'