Làm thế nào để SSH nhiều dịch vụ với một cho trong SHELL?


0

Tôi muốn truy cập một số máy chủ thông qua SSH, chạy một số lệnh và thoát. Làm điều này cho rất nhiều máy chủ.

Tôi biết tôi chỉ có thể làm điều này cho một máy, với tập lệnh này:

ssh **IP** << EOF

chown -R **COMMAND 1**

chown -R **COMMAND 2**

chmod -R 775 **COMMAND 3**

EOF

Nhưng khi tôi cố gắng đặt cái này vào trong FOR trong SHELL, cứ nói line 17: syntax error: unexpected end of file.}

Đây là mã của tôi cho SSH nhiều máy chủ:

#!/bin/bash

#user already added to group nagios by LDAP

declare -a arr=( **IP1 IP2 IP3** ...)

for i in ${arr[@]}
do
   echo  "Acessing server $i"
   ssh IP << EOF
   chown -R COMMAND 1
   chown -R COMMAND 2
   chmod -R 775 COMMAND 3
   EOF
done

Lỗi ở đây là của tôi ở đâu?

Câu trả lời:


2

Bash đang mong đợi để xem EOF ở đầu một dòng trong kịch bản của bạn. Hãy thử xóa thụt lề trước EOF.


Nó hoạt động, cảm ơn bạn! Tuy nhiên, nó in Pseudo-terminal will not be allocated because stdin is not a terminal.Tôi có nên lo lắng về điều này?
Valter Silva

1
Không phải nếu nó hoạt động;) tuy nhiên, để tránh thông báo, bạn có thể chạy các lệnh mà không cố phân bổ pty: ssh hostname 'command1; command2; command3'.
Flup

tuyệt quá! hoạt động hoàn hảo!
Valter Silva

1

Thử với ký tự dòng mới sau EOF đầu tiên và trước EOF cuối cùng.

Một điều nữa xuất hiện trong đầu tôi là, bạn cũng có thể sử dụng pssh (SSH song song) để thực hiện công việc. Tôi chỉ không biết nếu nó phù hợp với dự án của bạn.

Mong rằng sẽ giúp! :)


Tôi không biết về pssh, Tôi sẽ nhìn vào nó. Cảm ơn bạn!
Valter Silva
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.