Phát hiện chuyển tiếp tác nhân SSH


19

Làm cách nào tôi có thể biết liệu kết nối SSH đã được thiết lập có hoặc không có chuyển tiếp đại lý?

Tôi đang cố gắng làm như sau:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

và so sánh đầu ra, nhưng tôi chỉ có thể thấy sự khác biệt tinh tế.


1
Để tham khảo, hãy xem bài viết hay này: blog.joncairns.com/2013/12/under Hiểu-ssh-agent-and-shsh-add . Nó chỉ cho bạn một repo GitHub đẹp với một ssh-find-agentkịch bản để tìm và sử dụng các tác nhân ssh hiện có, rất tiện dụng! Repo có một số ví dụ trong README. Bạn có thể phát hiện nếu ssh-agent được kích hoạt như vậy, cùng với việc kiểm tra các tệp cấu hình SSH, thay vì nhìn vào đầu ra SSH.
trusktr

Câu trả lời:


21

Khi chuyển tiếp tác nhân ssh được bật trên máy khách ( ForwardAgent yesbật ~/.ssh/config) và cũng được bật trên máy chủ từ xa AllowAgentForwarding yes, khi đăng nhập vào máy chủ từ xa, biến môi trường SSH_AUTH_SOCKsẽ tồn tại. Sau đó, nếu bạn đăng nhập vào một máy chủ khác (khóa công khai của bạn phải nằm trên máy chủ thứ ba này), bạn không nên được nhắc nhập bất kỳ mật khẩu nào.

Làm rõ:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$

1
Các ssh-addlà những gì đã làm các trick cho tôi. Tôi đã làm việc trong nhiều tháng không biết về điều đó. Sau đó, tôi chuyển máy tính để bàn từ Unity sang LXDE và chuyển tiếp khóa tác nhân ngừng hoạt động.
Mark Hudson

@MarkHudson Vì một số lý do khi chạy LXDE, bạn phải chạy ssh-addmỗi khi mở cửa sổ giao diện điều khiển mới. Vì vậy, tôi đã thêm dòng lệnh đó vào cuối ~/.bash_profilevà bây giờ chuyển tiếp tác nhân xác thực hoạt động mọi lúc!
Paul Bernal

@PaulBernal Bạn không thực sự cần phải làm điều đó, tôi tưởng tượng bạn đã không ssh-agentthiết lập chính xác. Xem mah.everybody.org/docs/ssh
Michael Mrozek

1
m2c: tập tin trong "${SSH_AUTH_SOCK}"là một ổ cắm, bạn có thể kiểm tra nó vớiif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop

4

Kiểm tra môi trường SSH_AUTH_SOCKlà tốt cho các kết nối ssh trực tiếp.

Nếu bạn sử dụng proxy ( proxy_command), bạn có thể có một kết nối trông giống như:

local-> hostA-> hostB-> hostC->hostD

Nếu chuyển tiếp tác nhân được kích hoạt trên tất cả các máy chủ đó, thì nó SSH_AUTH_SOCKsẽ được đặt và "chứa" khóa ssh của bạn localtrên tất cả các máy chủ.

Bây giờ giả sử chuyển tiếp tác nhân bị vô hiệu hóa hostBnhưng được bật hostC. SSH_AUTH_SOCKsẽ được thiết lập hostDnhưng nó thực sự sẽ "trống rỗng". Tất nhiên các đại lý được chuyển tiếp nhưng chỉ từ hostCđến hostD. Chuỗi bị hỏng.

Bây giờ để kiểm tra xem thực sự chìa khóa có sẵn trên hostDbạn chỉ cần gọi ssh-add. Nó sẽ thoát với mã 1 trong mọi trường hợp, nhưng nếu khóa không có sẵn, nó sẽ hiển thị điều này trên stderr:

Không thể mở kết nối đến đại lý xác thực của bạn.

Vì vậy, bạn có thể kiểm tra SSH_AUTH_SOCKcộng đảm bảo ssh_addkhông có đầu ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.