lệnh ssh với dấu ngoặc kép


11

Tôi có một lỗi kỳ lạ là tôi đã không thể tìm thấy bất cứ điều gì về điều này. Tôi muốn thay đổi bình luận của người dùng bằng lệnh sau.

$ sudo usermod -c "New Comment" user

Điều này sẽ hoạt động trong khi đăng nhập vào một máy chủ nhưng tôi muốn tự động hóa nó trên 20 máy chủ. Thông thường tôi có thể sử dụng một danh sách và lặp qua các máy chủ và chạy một lệnh nhưng trong trường hợp này tôi gặp lỗi.

$ for i in `cat servlist` ; do echo $i ; ssh $i sudo usermod -c "New Comment" user ; done 
serv1
Usage: usermod [options] LOGIN

Options:
lists usermod options

serv2
Usage: usermod [options] LOGIN

Options:
lists usermod options
.
.
.

Khi tôi chạy vòng lặp này, nó sẽ trả về một lỗi như tôi đang sử dụng lệnh không chính xác nhưng nó sẽ chạy tốt trên một máy chủ.

Nhìn qua các trang ssh man tôi đã thử -tvà gắn -t -tcờ nhưng những trang đó không hoạt động.

Tôi đã sử dụng thành công perl -p -i -etrong một vòng lặp tương tự để chỉnh sửa các tập tin.

Có ai biết một lý do tôi không thể lặp lại điều này?

Câu trả lời:


6
for i in `cat servlist`;do echo $i;ssh $i 'sudo usermod -c "New Comment" user';done

hoặc là

for i in `cat servlist`;do echo $i;ssh $i "sudo usermod -c \"New Comment\" user";done

14

SSH thực thi lệnh từ xa trong shell. Nó chuyển một chuỗi đến shell từ xa, không phải là danh sách các đối số. Các đối số mà bạn chuyển đến các sshlệnh được nối với các khoảng trắng ở giữa. Những lập luận để sshsudo, usermod, -c, New Commentuser, do đó vỏ từ xa nhìn thấy lệnh

sudo usermod -c New Comment user

usermodphân tích cú pháp Commentnhư tên của người dùng và usernhư một tham số phụ giả.

Bạn cần chuyển các trích dẫn vào shell từ xa để nhận xét được coi là một chuỗi. Cách đơn giản nhất là đặt toàn bộ lệnh từ xa trong dấu ngoặc đơn. Nếu bạn cần một trích dẫn trong lệnh đó, hãy sử dụng '\''.

ssh "$i" 'sudo usermod -c "Jack O'\''Brian" user'

Thay vì gọi sshtrong một vòng lặp và bỏ qua lỗi, hãy sử dụng một công cụ được thiết kế để chạy các lệnh trên nhiều máy chủ như pssh, mussh, cl clustersh, v.v. Xem Tự động chạy các lệnh qua SSH trên nhiều máy chủ

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.