Buộc rsync sang chế độ không tương tác


8

Tôi muốn sử dụng rsync trong tập lệnh python. Tôi đang gọi nó bằng subprocessmô-đun và xác thực bằng các khóa công khai được lưu trữ tại authorized_keytệp trên máy từ xa.

Vấn đề duy nhất là khi tôi sử dụng rsync sử dụng tên người dùng từ xa sai, tôi được nhắc nhập mật khẩu, điều này rõ ràng sẽ tạm dừng tập lệnh sao lưu mãi mãi.

Tôi có thể buộc rsyncthoát ra nếu có lỗi không thể xác thực, thay vì nhắc mật khẩu không?

Udi

Câu trả lời:


9

Giả sử bạn sử dụng rsync với vỏ từ xa SSH (và không - ví dụ - với máy chủ rsync), thì bạn có thể lấy rsync để chạy SSH theo cách không bao giờ yêu cầu mật khẩu. Ví dụ: một lần có thể sử dụng cuộc gọi này:

rsync -e 'ssh -o "NumberOfPasswordPrompts 0"' source user@target:/path

Điều này sẽ buộc rsync sử dụng SSH với 0 lần thử mật khẩu có thể - nếu nó không thể truy cập bằng một số phương thức xác thực khác (như khóa chung hoặc GSSAPI) thì nó sẽ bị lỗi. Xin lưu ý rằng rsync sẽ không thích bạn khi điều đó xảy ra và sẽ phàn nàn lớn với STDERR và phá vỡ mã thoát 255.


5

Dưới đây là các tùy chọn dòng lệnh cho ssh mà tôi sử dụng để giữ im lặng.

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no

Bạn chỉ cần các công cụ lưu trữ nếu bạn không duy trì tệp know_hosts của mình và lo lắng về việc nhận cảnh báo MitM. Thay vì chỉ định các loại xác thực theo đề xuất của James F, tôi phải hạn chế rõ ràng việc xác thực mật khẩu. Tuy nhiên, tôi sử dụng điều này để đánh vào hàng trăm máy chủ với một vài phiên bản HĐH khác nhau, vì vậy nó có thể chỉ là một sự không tương thích.


1
Vui lòng KHÔNG sử dụng các cài đặt này. Xem phần 11.5 của "SSH, Vỏ an toàn: Hướng dẫn dứt khoát, Ấn bản thứ hai" của Oreilly. Theo cuốn sách: "Thật không may, bỏ qua xác thực máy chủ một cách hiệu quả sẽ vô hiệu hóa một phần quan trọng của bảo mật SSH: khả năng chống lại các cuộc tấn công giả mạo máy chủ và các cuộc tấn công trung gian! thực hiện hoặc thu hồi khóa trong trường hợp được biết là bị xâm phạm (nghĩa là nói với khách hàng không còn tin tưởng vào nó nữa). "
Mick

1
@Mick: rắc rối với những lời chỉ trích như thế này là chúng hoàn toàn không phù hợp trong một số bối cảnh. Ví dụ, tôi làm việc trong một môi trường mà mục tiêu của các hoạt động rsync nói chung là một loạt các hệ thống nhúng trong một mạng riêng được chôn sâu trong phòng thí nghiệm. Không có kết nối với thế giới bên ngoài, và hệ thống xây dựng cần có khả năng đẩy mã cập nhật xuống các mục tiêu. Đây là một cách sử dụng hoàn toàn hợp pháp của ssh và rsync, và giải pháp rõ ràng là tắt kiểm tra máy chủ. Để làm cho một quy tắc tuyệt đối về nó không có ý nghĩa gì cả.
Stablesog

@Stablesog - Lời khuyên của tôi là lời khuyên chính xác cho phần lớn các trường hợp sử dụng. Tuy nhiên, tôi thừa nhận rằng khi bạn không tin rằng một diễn viên xấu có thể truy cập vào mạng của bạn một cách hợp lý để thực hiện một cuộc tấn công MiTM, bạn có thể chọn cấu hình bảo mật yếu. Cấu hình bảo mật cần thiết cho môi trường phòng thí nghiệm (như bạn đã đề cập) rõ ràng sẽ khác với môi trường sản xuất vì rủi ro giảm đi một cách tự nhiên.
Mick

Đủ công bằng. Tuy nhiên, đây là mối quan tâm triết học, cũng như thực tế: ssh được đánh giá cao hơn nhiều so với khả năng bảo mật của nó , và trên thực tế ... trong hầu hết các cài đặt tôi đã thấy, bảo mật là mối quan tâm ít quan trọng nhất . Nó chỉ là con dao quân đội được lựa chọn cho các kết nối từ xa của tất cả các loại. Vì vậy, có sự mất kết nối giữa những lời mắng mỏ "những người theo chủ nghĩa bảo mật" và cách mà những người thực sự sử dụng nó mọi lúc theo cách thực tế hàng ngày. Tôi không tin rằng tất cả chúng ta chỉ là những kẻ ngốc bình thường và những người theo chủ nghĩa thuần túy là "đúng". Đó là một câu hỏi để biết khi nào cần quan tâm.
Stablesog

1

re: Đề xuất của James (không đưa ra tty), đối với quy trình con, hãy thử đặt stdin = Không làm tham số cho Popen.



0

Tùy thuộc vào cách bạn khởi chạy rsync, việc không cung cấp TTY hoặc PTY có thể giúp ích.

Nhiều chương trình kiểm tra xem họ có TTY kiểm soát hay không trước khi quyết định nhắc người dùng nhập liệu. Hành vi mặc định của system () và các cuộc gọi tương tự là cung cấp một tty cho các chương trình con, nhưng bạn có thể vô hiệu hóa điều này.

Cũng có thể vô hiệu hóa hoàn toàn xác thực mật khẩu ở phía xa nếu bạn kiểm soát cả hai hệ thống và muốn thoát khỏi xác thực mật khẩu vì lợi ích bảo mật trong khi giải quyết vấn đề này.

Nếu bạn đang thực hiện rsync qua SSH, bạn có thể thêm phần sau vào tệp ssh_config cho máy chủ được đề cập hoặc thông qua công tắc dòng lệnh -o:

PreferredAuthentications publickey

Trong một bài kiểm tra nhanh (chỉ ssh, không phải rsync) đã khiến SSH thoát ngay lập tức khi khóa công khai của tôi không được chấp nhận mà không nhắc tôi nhập mật khẩu.

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.