Tại sao không chỉ đơn giản sử dụng% h trong tùy chọn ControlPath của OpenSSH?


12

Tại sao các "ssh_config (5)" manpages khuyên các ControlPathtùy chọn nên chứa ít nhất %h, %p%rgiữ chỗ để nhận ra duy nhất mỗi kết nối chia sẻ?

Tôi nghĩ rằng nhiều phiên nên chia sẻ cùng một ổ cắm với một kết nối đến cùng một máy chủ. Sẽ không có ý nghĩa khi có một định nghĩa đơn giản như:

ControlPath ~/.cache/ssh/mux/%h

Thay vì một cái gì đó như:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

Theo hiểu biết của tôi với định nghĩa đầu tiên, một kết nối được chia sẻ giữa nhiều phiên với những người dùng từ xa khác nhau, đến cùng một máy chủ từ xa, trên các cổng từ xa khác nhau.

Tôi muốn có định nghĩa đầu tiên trong phần mặc định của máy chủ để nó đủ để nói ssh -o ControlMaster=no.

Tôi muốn chia sẻ kết nối đến cùng một máy chủ từ xa giữa tất cả các phiên được khởi tạo bởi cùng một người dùng cục bộ bất kể người dùng từ xa và cổng từ xa. Ổ cắm của máy khách chính sẽ nằm bên dưới thư mục chính của người dùng cục bộ.


"Tôi muốn chia sẻ kết nối đến cùng một máy chủ từ xa giữa tất cả các phiên được khởi tạo bởi cùng một người dùng cục bộ bất kể người dùng từ xa và cổng từ xa." Câu trả lời ngắn gọn: bạn không thể . Tôi đã thêm một loại giải thích trong câu trả lời của tôi.
goldilocks

Câu trả lời:


12

"Tôi nghĩ rằng nhiều phiên nên chia sẻ cùng một ổ cắm với một kết nối đến cùng một máy chủ."

Họ có thể. Tuy nhiên, lưu ý rằng nếu bạn kết nối với máy chủ bằng kết nối hiện có thông qua ControlPath, bất kể người dùng nào bạn định đăng nhập, bạn sẽ đăng nhập với tư cách là người dùng ban đầu của kết nối. Ví dụ: không có kết nối được thiết lập với "một nơi nào đó":

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

Phiên này là bob @ ở đâu đó.

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

Phiên này cũng sẽ là bob @ ở đâu đó, vì bạn đã sử dụng cùng ControlPath và thiết lập ControlMaster=no; nếu ControlMaster=yes, bạn đã đăng nhập như là kiện, nhưng ssh sẽ bỏ qua đối số ControlPath của bạn, như được ngụ ý trong man ssh_config:

Các phiên bổ sung có thể kết nối với ổ cắm này bằng cách sử dụng cùng ControlPath với ControlMaster được đặt thành 'không' .

Bằng chứng về điều này, nếu ControlMaster=yestrong cả hai trường hợp, khi bob thoát ổ cắm ControlPath ~/.ssh/somewheresẽ biến mất ngay cả khi phiên "kiện" vẫn đang chạy, có nghĩa là phiên kiện không bao giờ sử dụng ổ cắm đó .

Vì vậy, nếu bạn muốn sử dụng cùng một kết nối, %hthì tốt thôi, nhưng hãy cẩn thận rằng bạn không thể chia sẻ kết nối vì nhiều người dùng từ xa khác nhau - ssh sẽ không cho phép bạn.


Cảm ơn rất nhiều. Trước câu trả lời công phu của bạn, tôi đã bỏ lỡ một thực tế, rằng không thể chia sẻ ổ cắm chính của khách hàng giữa những người dùng từ xa khác nhau mà không cùng lúc người dùng từ xa thứ hai giả định danh tính của người đầu tiên.
Tim Friske

5

Bạn có thể có nhiều người dùng và nhiều cổng được sử dụng cho cùng một máy chủ. Bản thân tôi, tôi kết nối với hàng trăm hệ thống trên mạng nội bộ của công ty, hầu hết có nhiều người dùng với các chức năng hoặc máy chủ ứng dụng khác nhau. Quyền truy cập vào userA rất khác với quyền truy cập vào userB và kết nối chính sẽ cần phải khác. Ngắn gọn hơn, nếu bạn định chạy:

$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA

Như bạn có thể thấy, chúng tôi không nhận được phiên OpenSSH với userB, mà là phiên bản gốc với userA. Điều đó có nghĩa là thư mục chính, quyền và thậm chí chính xác thực không phải là điều được mong đợi. Sử dụng điều này, nếu bạn cố xóa một tệp trong thư mục của userB, thì a) đó có thể là tệp sai và b) đó có thể là quyền sai.

Nếu bạn sẽ không bao giờ kết nối với nhiều hơn một người dùng trên bất kỳ một máy chủ nào bằng một cổng duy nhất, thì có, sử dụng %hcó thể là đủ. Trong ~/.ssh/configtệp của bạn , bạn sẽ muốn sử dụng:

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

Với ControlPersisttùy chọn, kết nối chính vẫn mở trong nền cho đến khi bị giết hoặc chấm dứt ssh -O exit. Đây là một tính năng thiết lập-và-quên-nó đẹp.

Nhưng nếu có bất kỳ khả năng kết nối với nhiều người dùng trên bất kỳ một máy chủ nào, thì bạn sẽ muốn một cái gì đó an toàn hơn:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes

Tôi vẫn còn bối rối. Tôi đã cố gắng làm rõ kịch bản cấu hình và ý định của tôi trong đoạn "Tôi muốn". Có ai có thể trả lời câu hỏi của tôi chính xác hơn với thông tin bổ sung này không?
Tim Friske
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.