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 đâyCá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ồiBì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.shNhư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 ; doneNhư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 sshpassVà 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ướifor 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 psshHoặ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 psshSau 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
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.