Linux tương đương với việc điều khiển từ xa một đến nhiều của PowerShell


38

Đến từ quản trị Windows, tôi muốn tìm hiểu sâu hơn về Linux (Debian). Một trong những câu hỏi hóc búa của tôi, tôi không thể trả lời việc tìm kiếm trên web (không tìm thấy nó) là: làm thế nào tôi có thể đạt được cái gọi là từ xa "một-nhiều" như trong PowerShell cho Windows?

Để chia nó thành những điều cơ bản tôi sẽ nói:

Quan điểm của tôi về Linux:

  • Tôi có thể ssh vào một máy chủ và gõ lệnh của tôi
  • Tôi nhận được kết quả. Đối với môi trường 10 máy chủ, tôi sẽ phải viết một tập lệnh (perl / python?) Gửi lệnh cho mỗi máy chủ?

Kinh nghiệm của tôi từ Windows:

  1. Tôi gõ lệnh của mình và với "lệnh gọi" Tôi có thể "gửi" lệnh này đến một loạt các máy chủ (có thể từ tệp văn bản) để thực thi đồng thời và lấy lại kết quả (như một đối tượng để tiếp tục làm việc).

  2. Tôi thậm chí có thể thiết lập nhiều phiên, kết nối được giữ ở chế độ nền và gửi có chọn lọc các lệnh đến các phiên này và từ xa vào và ra như tôi cần.

(Tôi đã nghe nói về đầu bếp, con rối, v.v ... Đây có phải là một cái gì đó như thế không?)


Update 2019:
Sau khi thử rất nhiều - tôi đề nghị Rex (xem bình luận này bên dưới ) - thiết lập dễ dàng (hiệu quả là nó chỉ cần ssh, không có gì khác) và sử dụng (nếu bạn biết chỉ một chút perl thì còn tốt hơn, nhưng nó là tùy chọn)
Với Rex (ify ) bạn có thể thực hiện lệnh adhoc và chuyển nó thành quản lý cấu hình thực sự (... có nghĩa là: đó là CM ở vị trí đầu tiên, nhưng cũng rất tốt cho các tác vụ adhoc), hiện tại trang web đã lỗi thời, nhưng hiện tại (kể từ ngày 01/2019) đó là sự phát triển tích cực và IRC-Channel cũng hoạt động.

Với chức năng mới của Windows openssh có nhiều hơn khả năng

bạn co thể thử: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'


song song ssh có thể làm điều đó: serverfault.com/questions/2533/ trên
rogerdpack 14/03/2016

MobaXTerm hỗ trợ "đa thực thi" trong nhiều phiên ssh: mobaxterm.mobatek.net/features.html (cuộn xuống). Ngoài ra, nếu môi trường máy trạm chính của bạn là Windows, thì đây cũng là một công cụ khá hay để kết nối với các hộp Linux và hơn thế nữa.
Kev

với tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Câu trả lời:


50

Tóm lược

  • Ansible là một công cụ DevOps là sự thay thế mạnh mẽ cho PowerShell
  • RunDeck như một giao diện đồ họa rất tiện dụng
  • Một số người chạy RunDeck + Ansible cùng nhau

cụm

Để gửi các lệnh từ xa đến một số máy chủ, đối với người mới bắt đầu, tôi sẽ khuyên bạn nên phân cụm

Để cài đặt clustersshtrong Debian:

apt-get install clusterssh

Một hướng dẫn cụm khác :

ClusterSSH là một trình bao bọc Tk / Perl xung quanh các công cụ Linux tiêu chuẩn như XTerm và SSH. Như vậy, nó sẽ chạy trên bất kỳ HĐH tương thích POSIX nào có thư viện tồn tại - Tôi đã chạy nó trên Linux, Solaris và Mac OS X. Nó yêu cầu các thư viện Perl Tk (perl-tk trên Debian hoặc Ubuntu) và X11 :: Giao thức (libx11-Protocol-perl trên Debian hoặc Ubuntu), ngoài xterm và OpenSSH.

Ansible

Đối với một khung từ xa để quản trị nhiều hệ thống, Ansible là một thay thế rất thú vị cho Puppet. Nó gọn gàng hơn và không cần các tác nhân từ xa chuyên dụng vì nó hoạt động trên SSH (nó cũng đã được RedHat mua)

Playbooks phức tạp hơn các tùy chọn dòng lệnh.

Tuy nhiên, để bắt đầu sử dụng Ansible, bạn cần cài đặt đơn giản và thiết lập tệp văn bản danh sách khách hàng.

Sau đó, để chạy một lệnh trong tất cả các máy chủ, đơn giản như thực hiện:

ansible all -m command -a "uptime"

Đầu ra cũng được định dạng và phân tách rất độc đáo cho mỗi quy tắc / máy chủ, và trong khi chạy nó trong nền có thể được chuyển hướng đến một tệp và được tư vấn sau.

Bạn có thể bắt đầu với các quy tắc đơn giản và việc sử dụng Ansible sẽ trở nên thú vị hơn khi bạn phát triển trong Linux và cấu trúc hạ tầng của bạn trở nên lớn hơn. Vì vậy, nó sẽ làm được nhiều hơn PowerShell.

Ví dụ, một Playbook rất đơn giản để nâng cấp các máy chủ Linux mà tôi đã viết:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

Nó cũng có nhiều mô-đun được xác định cho phép bạn dễ dàng viết các chính sách toàn diện.

Chỉ số mô-đun - Tài liệu Ansible

Nó cũng đã có một kho lưu trữ chính thức / mạng xã hội chính thức thú vị để tìm kiếm các chính sách có thể thực hiện được của cộng đồng. Thiên hà ansible

Ansible cũng được sử dụng rộng rãi và bạn sẽ tìm thấy rất nhiều dự án trong github, như dự án này từ chính tôi để thiết lập FreeRadius .

Mặc dù Ansible là một khung mã nguồn mở miễn phí, nó cũng có giao diện bảng điều khiển web trả phí, Ansible Tower mặc dù việc cấp phép khá tốn kém.

Ngày nay, sau khi RedHat mua nó, tháp cũng có phiên bản mã nguồn mở được gọi là AWX .

Như một phần thưởng, Ansible cũng có khả năng quản trị các máy chủ Windows, mặc dù tôi chưa bao giờ sử dụng nó cho việc đó.

Nó cũng có khả năng quản lý các thiết bị mạng (bộ định tuyến, chuyển mạch và tường lửa), làm cho nó trở thành một giải pháp rất thú vị như một giải pháp chìa khóa tự động hóa.

Cách cài đặt Ansible

Rundeck

Tuy nhiên, một lần nữa, để một khung từ xa dễ sử dụng hơn, nhưng không mạnh như Ansible, tôi khuyên bạn nên dùng Rundeck .

Đây là một giao diện đồ họa đăng nhập nhiều người dùng / đăng nhập rất mạnh mẽ, nơi bạn có thể tự động hóa nhiều công việc hàng ngày thông thường của mình và thậm chí cung cấp các chế độ xem xuống cho người dùng hệ thống hoặc người trợ giúp.

Khi chạy các lệnh, nó cũng cung cấp cho bạn các cửa sổ với đầu ra được chia nhỏ theo máy chủ / tác vụ.

Nó có thể chạy nhiều công việc trong nền một cách liền mạch và cho phép bạn xem báo cáo và đầu ra sau này.

hình ảnh rundeck

Cách cài đặt RunDeck

Xin lưu ý rằng có những người đang chạy Ansible + RunDeck dưới dạng giao diện web; không phải tất cả các trường hợp được chiếm đoạt cho điều đó.

Cũng không cần phải nói rằng việc sử dụng Ansible và / hoặc RunDeck có thể được hiểu là một dạng hoặc một phần của tài liệu cấu trúc hạ tầng, và theo thời gian cho phép sao chép và cải thiện các hành động / công thức nấu ăn / Playbooks.

Cuối cùng, nói về một máy chủ chỉ huy trung tâm, tôi sẽ tạo một cái chỉ để thực hiện nhiệm vụ. Trên thực tế thuật ngữ kỹ thuật là một hộp nhảy. 'Nhảy hộp' cải thiện bảo mật, nếu bạn thiết lập chúng đúng .


1
Ansible là một giải pháp tuyệt vời so với một số tập lệnh hoặc tiện ích chỉ đơn thuần phát lệnh cho nhiều máy chủ SSH. Ansible thực hiện điều đó (và phù hợp hơn cho mục đích đó so với Puppet hoặc Chef), nhưng cũng cung cấp cho bạn tùy chọn để đạt được mục tiêu của mình theo cách tốt hơn, ví dụ như sử dụng mô-đun tích hợp để cài đặt một cái gì đó một cách bình thường thay vì chỉ gửi lệnh cài đặt và hy vọng điều tốt nhất
JBentley


12

Bạn cũng có thể sử dụng pssh(hoặc parallel-ssh), là ứng dụng khách SSH kết nối với danh sách các máy chủ và thực thi lệnh trên tất cả các máy chủ song song:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

11

Có lẽ bạn có thể đạt được mục tiêu của mình với hàm zsh (bash) đơn giản. Giả sử bạn có máy chủ l61 l62 l63 và bạn thường cần chạy lệnh trên chúng:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Vì vậy, trong dòng lệnh:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64

5
Tôi khuyên bạn nên in tên của các máy chủ trước khi đầu ra của chúng. Chạy kịch bản song song cũng mang lại những điều kỳ quặc khác, như dò dẫm đầu ra của tập lệnh - các biện pháp bổ sung phải được thực hiện để bảo toàn hoạt động của đầu ra. Chạy từng tác vụ trong nền trước cũng cung cấp khả năng tương tác đầu vào tối thiểu.
Rui F Ribeiro

3

Nếu bạn đang sử dụng KDE, đây là một phương pháp khác.
- Mở cửa sổ Konsole.
Đối với mỗi máy chủ bạn muốn liên lạc với:
- mở một tab
- thiết lập kết nối ssh với máy chủ
Trong menu "Chỉnh sửa", chọn "sao chép đầu vào" thành "tất cả các tab"

Mỗi lệnh bạn nhập trong tab đó sẽ được sao chép vào tất cả các máy chủ.
Bạn có thể chuyển từ tab này sang tab khác để xem các kết quả khác nhau.

Lưu ý: nhãn menu của tôi (trong ngoặc kép) có thể sai vì tôi không sử dụng phiên bản tiếng Anh của KDE


1

GNU song song

Nó cho phép một lớp đơn giản với các cài đặt đã lưu, do đó bạn có thể tạo một hồ sơ, "prod", sẽ chứa danh sách máy chủ và các công tắc chung. Sau đó, chỉ cần thêm lệnh bạn muốn và bạn đã sẵn sàng. máy chủ và tự động xóa chúng ở cuối, và nó khá thuận tiện cho các tập lệnh lớn hơn. Ngoài ra, nó rất nhanh.

Vấn đề duy nhất là nó có rất nhiều lựa chọn;) Nhưng tài liệu cũng bao gồm rất nhiều ví dụ, vì vậy bạn chỉ cần nhìn vào chúng ngay từ đầu.


2
Xin chào, Chào mừng bạn đến với Linux và Linux. Ai đó đã đưa ra một kịch bản sử dụng song song gnu có một ví dụ. Tôi khuyên bạn nên đưa ra một cái nhìn xung quanh, câu trả lời công phu hơn được đánh giá cao, và sẽ cho bạn nhiều điểm hơn.
Rui F Ribeiro

1
@RuiFRibeiro xin lỗi tôi đã không nhận thấy, lỗi ứng dụng android SO với codeboxes và tôi không thể thấy hầu hết nội dung (nó tạo ra khoảng trắng trống). Bạn đã đề cập đến song song gnu là đầu ra dò dẫm - nó có thể viết nó theo thứ tự nhưng bạn phải bảo nó làm như vậy :)
alkuzad 15/03/2016

Vâng, tôi không quen thuộc với nó, nhưng đã nghi ngờ như vậy, do đó đề cập đến câu trả lời cần cải thiện. Cảm ơn. Không có gì ngăn cản bạn viết một câu trả lời tốt hơn xung quanh nó, tuy nhiên để bình luận, tôi khuyên bạn nên bình luận trong câu trả lời đó.
Rui F Ribeiro

1

Tôi cũng muốn đề cập đến "Rex" tại đây: https://www.rexify.org/

Đây là một công cụ tuyệt vời sử dụng perl + ssh (xác thực người dùng / mật khẩu hoặc khóa) và vì perl được cài đặt trên mọi hệ thống linux (?!), Tôi nghĩ rằng nó có vẻ tự nhiên hơn để sử dụng (nó có một số điểm tương đồng với Ansible & Co.)

bạn có thể chạy các lệnh adhoc trên nhiều máy chủ cùng một lúc (server1, server2, server ... - sau khi thiết lập xác thực hoặc sử dụng các tham số -p / -u và -s / -S để thực thi lệnh sudo):

$ rex -H "server[1..3]" -e 'say run "uptime"'

hoặc tạo một tệp nơi bạn chỉ định các "tác vụ" khác nhau và gọi chúng từ đó

$ rex -f myConfigFile.rex uptime

Nó có thể được cài đặt thông qua các kho lưu trữ hoặc thậm chí với perls cpan (hoặc cpanm Rex) và thiết lập ban đầu rất dễ dàng, xem:
- https://www.rexify.org/ hoặc
- https://www.rexify.org/docs/guides/ start_USE__r__ex.html
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

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.