Header Ads Widget

Ticker

6/recent/ticker-posts

Chạy và thực thi script bash shell trên nhiều máy Ubuntu với vòng lập for và pssh

Keyword: Executing bash shell script on multiple remote servers ubuntu
Giả sử bạn đang làm ở một công ty lớn có rất nhiều User sử dụng Ubuntu và bạn muốn chạy một đoạn script lên những máy đó để thực hiện một vấn đề gì cho công việc chẳn hạn, nhưng nếu cứ ssh vào từng máy mà làm thì thật sự quá mệt mỏi, đúng hơn là thiếu sự chuyên nghiệp, vậy lúc đó bạn sẻ làm như thế nào? câu hỏi đó mình sẻ giải đáp cho các bạn vào bài viết này
Ở đây mình có 2 giải pháp cho các bạn tùy vào quá trình mà các bạn lựa chọn, giải pháp đầu tiên sẻ là sử dụng vòng lập for và giải pháp thứ hai chính là sử dụng một công cụ hổ trợ đó chính là pssh hay còn biết đến với tên gọi khác là parallel-ssh, mình sẻ bắt đầu đi vào từng cái đây

Cách 1: Sử dụng vòng lập for

Trước tiên chúng ta sẻ tạo 1 file .sh là file script mà chúng ta sẻ thực thi cho chạy script trên các server và ở đây hiện tại mình đã có sẵn 1 dãi IP của tất cả các máy Ubuntu bỏ vào sẵn trong file txt rồi
Bình thường để thực thi file script.sh trên một máy thôi thì các bạn sẻ dùng câu lệnh sau
ssh root@the_server_ip 'bash -s' < ./script.sh
Nhưng mình sẻ sử dụng vòng lập for để giải quyết nó yêu cầu nó truy cập và thực thi con script này trên từng máy từng máy một bằng đoạn script sau
for server in $(cat servers.txt) ; do ssh root@${server} 'bash -s' < ./script.sh ; done
Nhưng với đoạn code trên thì các bạn vướng lỗi ở chổ cứ mỏi 1 lần chạy là nó lại đòi nhập password để có thể access và thực hiện script như vậy chúng ta cần phải có sự hổ trợ từ phần mềm thứ 3 chính là sshpass
sudo apt-get install sshpass
Và câu lệnh để thực thi nó sẻ là như sau với 1234@abcd là password đăng nhập cho các IP
sshpass -p 1234@abcd ssh user@hostname
Dựa vào đều trên mình sẻ tạo ra một đoạn code mới hoàn thiện như bên dưới
for server in $(cat ip.txt) ; do sshpass -p 1234@abcd ssh ubuntu@${server} 'bash -s' < /media/thanhphatit/DATA/Scripts/XRDP/command-xrdp.sh ; done
ở đây command-xrdp.sh là file script của mình còn ip.txt chính là danh sách IP của công ty mình, nhưng nếu trong đoạn script của các bạn thực hiện các câu lệnh cần quyền sudo thì các bạn phải làm như sau để tránh bị yêu cầu hỏi pass nhé ví dụ mình thực hiện lệnh update và bỏ nó vào file script như sau
echo 1234@abcd | sudo -S apt update -y

Cách 2: Sử dụng tools pssh

Đối với cách này các bạn cần cài đặt thằng pssh vào máy nhé
sudo apt-get install pssh
Hoặc các bạn có thể dựa vào python để giải quyết bằng cách download python về sau đó thực hiện cài đặt pip
sudo apt-get install python
pip install pssh
Sau khi đã cài đặt xong rồi chúng ta thực hiện bằng cách sau, ở đây mình sẻ tạo 1 file được gọi là ip.txt file này sẻ chứa những ip các máy mà mình muốn thực thi các con script
Sau đó mình lại viết một con script chứa một đoạn code hoặc có thể chạy trực tiếp đoạn code đó trên terminal, ở đây mình sử dụng đoạn script để dễ dàng control hơn
sshpass -p 'mypass' pssh -v -h "ip.txt" -A -i "-O StrictHostKeyChecking=no" -l ubuntu "wget --user=youruser --password=yourpass https://download.com/yourscript.sh; chmod +x yourscript.sh; echo passubuntu | sudo -S ./yourscript.sh; rm -rf *.sh"
Các bạn chú ý những cái này nhé, sshpass thì mình đã nói ở phía trên rồi dùng để truyền pass trong môi trường ssh hay này kia, ở đây mình đã upload script và thực hiện download nó về các máy của user ubuntu, mypass chính là pass máy tính cá nhân của mình, ip.txt chính là danh sách ip mình đã nói ở trên, ubuntu chính là account ubuntu của các máy trong danh sách ip, còn 2 cái user và pass của phần wget chính là tài khoản để mình download thôi cái này bạn không cần chú ý nhiều cũng được vì nếu như trang upload của bạn không có yêu cầu password trước khi tải, còn phần còn lại thì nó cũng giống như ở trên mình đã giải thích ở dòng lập for rồi.
Chúc các bạn thành công nhé.
Nguồn: itblognote.com

Post a Comment

0 Comments