Giới thiệu về Salt SSH

Salt SSH cho phép bạn thực thi các lệnh hoặc trạng thái Salt mà không cần cài đặt gói salt-minion.

Trong quá trình thực thi, Salt SSH sẽ sao chép các tập tin cần thiết vào thư mục hệ thống đích /tmpthông qua SSH, sau đó thực thi các lệnh và cuối cùng dọn sạch các tập tin tạm thời của Salt.

Xin lưu ý: Vì sử dụng SSH nên Salt SSH chậm hơn Salt chuẩn với ZeroMQ.

Trước khi bạn bắt đầu

1.Hướng dẫn này giả định rằng bạn đang sử dụng hệ thống dựa trên rpm (CentOS, RedHat, Oracle Enterprise Linux).

2.Hãy đảm bảo rằng bạn đã cài đặt các gói saltvà salt-sshtrên máy chủ của mình. Kiểm tra xem các gói này đã được cài đặt chưa:

$rpm -q salt
$rpm -q salt-ssh

Ghi chú: Để biết hướng dẫn chi tiết về cách thiết lập kho lưu trữ SaltStack, vui lòng tham khảo Hướng dẫn cài đặt Salt Stack

3.Minions của bạn phải cài đặt Python. Nếu không cài đặt Python trên minions, bạn sẽ chỉ có thể chạy Salt SSH ở chế độ thô. Ở chế độ thô, lệnh shell thô không thể sử dụng các mô-đun thực thi hoặc áp dụng trạng thái Salt. Nếu bạn đang chạy phiên bản hiện đại của CentOS/RedHat, bạn đã cài đặt Python trên hệ thống của mình

4.Bạn phải có ít nhất một máy chủ chính và một máy khách.

Thiết lập tệp danh sách Salt 

Tệp Roster chứa thông tin hệ thống mục tiêu, chi tiết kết nối và thông tin xác thực. Vị trí mặc định cho tệp Roster là: /etc/salt/roster.

Ghi chú: Tệp danh sách được cấu hình trên máy chủ chính.

1.Mở /etc/salt/rosterbằng trình soạn thảo. Xác định hệ thống máy khách bằng cách thêm các dòng sau vào tệp:

Đây là một ví dụ về định nghĩa máy chủ tối thiểu

linode1:
     host: <IPADDRESS OR HOSTNAME>
     user: <username>
     passwd: <password>

Ghi chú: Tệp Roster lưu trữ dữ liệu theo định dạng YAML. Không thêm khoảng trắng không cần thiết vào tệp cấu hình.

2.Nếu bạn có khóa công khai được lưu trữ trên minion và khóa riêng trên hệ thống chính, bạn có thể cấu hình quyền truy cập vào minion bằng khóa riêng. Để xác thực khóa công khai, hãy thêm các dòng sau vào tệp Roster:

#This is an example of minimal host definition using private key:
linode1:
    host: <IPADDRESS OR HOSTNAME>
    user: <username>
    priv: /<username_home_folder>/.ssh/id_rsa

Ghi chú: Sử dụng khóa SSH là cách an toàn nhất để truy cập vào máy chủ của bạn vì mật khẩu không được lưu trữ dưới dạng văn bản thuần túy.

3.Để thiết lập kết nối với một minion như một người dùng thông thường, bạn phải cấu hình một vài tệp. Trong trường hợp này, Salt sẽ tận dụng các đặc quyền thông qua sudo. Để sử dụng sudo, hãy thiết lập sudo: Truetrong host definitionphần của tệp Roster. Theo mặc định, sudo sẽ chỉ hoạt động khi người dùng thực sự đăng nhập qua TTY. Bạn có thể khắc phục điều này theo hai cách:

Vô hiệu hóa kiểm tra TTY bằng cách bình luận một dòng trong tệp sudoers trên minion của bạn:

# Defaults requiretty

Buộc phân bổ TTY bằng cách thiết lập tty: Truetùy chọn trong tệp Danh sách của bạn:

linode1:
    host: <IPADDRESS OR HOSTNAME>
    user: <username>
    passwd: <password>
    sudo: True
    tty: True

Ghi chú: Quyền sử dụng thông qua sudo chỉ hoạt động nếu tùy chọn NOPASSWD được thiết lập cho người dùng đang kết nối với minion trong /etc/sudoers. Bạn có thể tìm thêm thông tin về tệp Roster trong tài liệu tệp Roster .

4.Kiểm tra xem máy chủ chính có quyền truy cập vào máy khách hay không bằng lệnh salt-ssh:

[root@master ~]# salt-ssh linode1 test.ping

Đầu ra sẽ là:

linode1:
    True

Ghi chú: Nếu khóa SSH không được triển khai, bạn có thể nhận được thông The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:báo. Trong trường hợp này, chỉ cần chạy salt-sshvới cờ -i. Khóa này sẽ cho phép Salt tự động chấp nhận khóa công khai của minion. Điều này chỉ phải được thực hiện một lần, trong quá trình trao đổi khóa SSH ban đầu.

Thực hiện lệnh từ xa qua Salt SSH

1.Bạn có thể thực hiện bất kỳ lệnh nào trên minion của mình thông qua cmdmô-đun thực thi:

[root@master ~]# salt-ssh linode1 cmd.run "du -sh /root"
    linode1:
        15M /root

2.Salt SSH hỗ trợ biểu thức chính quy globbing và PCRE. Ví dụ, nếu bạn muốn thực thi lệnh trên tất cả các minion có tên chứa “linode”:

[root@master ~]# salt-ssh "linode*" cmd.run 'uname -r'
linode1:
    3.10.0-229.1.2.el7.x86_64
linode2:
    2.6.32-573.3.1.el6.x86_64

Ghi chú: Salt SSH thực thi nhiều lệnh đồng thời, mặc định tối đa là 25 kết nối đồng thời.

3.Có thể sử dụng bất kỳ mô-đun thực thi nào với Salt SSH. Với các mô-đun thực thi, bạn có thể cài đặt các gói, kiểm soát các dịch vụ, thu thập thông tin hệ thống và nhiều hơn nữa.

[root@master ~]# salt-ssh linode1 pkg.install iftop
linode1:
    ----------
    iftop:
    ----------
    new:
        1.0-0.14.pre4.el7
    old:

[root@master ~]# salt-ssh linode1 service.restart httpd
    linode1:
        True

[root@master ~]# salt-ssh linode1 disk.percent /var
    linode1:
        22%

Ghi chú: Danh sách đầy đủ các mô-đun thực thi có sẵn tại Tài liệu mô-đun thực thi .

Cài đặt Salt-Minion từ xa qua Salt SSH

Một trường hợp sử dụng thú vị của Salt SSH là tự động hóa quá trình cài đặt bằng salt-minioncách sử dụng trạng thái Salt đơn giản.

1.Tạo thư mục chứa trạng thái của bạn:

[root@master ~]# mkdir /srv/salt/install_salt_minion

2.Mở /srv/salt/install_salt_minion/init.slstệp và khai báo trạng thái của bạn:

# This is a state which will install salt-minion on your hosts using Salt SSH
# It will install the SaltStack repo, install salt-minion from that repo, enable and start the salt-minion service and
# declare master in /etc/salt/minion file
salt-minion:
    # Install SaltStack repo for RHEL/Centos systems
    pkgrepo.managed:
        - name: salt-latest
        - humanname: SaltStack Latest Release Channel for RHEL/Centos $releasever
        - baseurl: https://repo.saltproject.io/yum/redhat/$releasever/$basearch/latest
        - gpgkey: https://repo.saltproject.io/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
        - gpgcheck: 1
        - enabled: 1
    # Install the salt-minion package and all its dependencies.
    pkg:
        - installed
        # Require that SaltStack repo is set up before installing salt-minion.
        - require:
            - pkgrepo: salt-latest
    # Start and enable the salt-minion daemon.
    service:
        - running
        - enable: True
        # Require that the salt-minion package is installed before starting daemon
        - require:
            - pkg: salt-minion
        # Restart salt-minion daemon if /etc/salt/minion file is changed
        - watch:
            - file: /etc/salt/minion

# Configure Salt master in conf file
/etc/salt/minion:
    file.managed:
        # File will contain only one line
        - contents:
            - master: <IPADDRESS OR HOSTNAME>

3.Để áp dụng trạng thái này, hãy chạy lệnh sau:

[root@master salt]#  salt-ssh linode2 state.apply install_salt_minion

4.Kiểm tra xem khóa của minion có đang chờ chấp nhận hay không bằng cách sử dụng salt-keylệnh:

[root@master salt]# salt-key -l un
Unaccepted Keys:
    linode2

5.Để hoàn tất cấu hình minion, hãy chấp nhận khóa công khai của nó:

[root@master salt]# salt-key -a linode2

Sau khi khóa minion được chấp nhận, minion sẽ được cấu hình đầy đủ và sẵn sàng để thực hiện lệnh.

Nguồn: https://www.linode.com/docs/guides/configure-and-use-salt-ssh/