Tôi đang cố gắng viết một kịch bản mong đợi sẽ ssh vào một máy chủ, gửi sudo su, sau đó kiểm tra trạng thái iptables và đưa đầu ra vào tệp nhật ký trên máy chủ. Dưới đây là kịch bản.mong đợi kịch bản để ssh trả về tên lệnh không hợp lệ
1 #!/usr/bin/expect
2 exp_internal 1
3 log_user 0
4 set timeout 10
5 set password "******"
6
7 spawn /usr/bin/ssh -l subhasish *.*.*.* -p 10022
8
9 expect {
10 -re "password: " {send "$password\r"}
11 -re "$ " {send "sudo su\r"}
12 -re "[sudo] password for subhasish:" {send "$password\r"}
13 -re "# " {send "service iptables status\r"}
14 }
15 set output $expect_out(buffer)
16 send "exit\r"
17 puts "$output\r\n" >> output.log
Nhưng trong khi chạy ở chế độ gỡ lỗi, tôi nhận được lỗi như thế này;
expect -d testcase
expect version 5.44.1.15
argv[0] = expect argv[1] = -d argv[2] = testcase
set argc 0
set argv0 "testcase"
set argv ""
executing commands from command file testcase
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {24105}
invalid command name "sudo"
while executing
"sudo"
invoked from within
"expect {
-re "password: " {send "$password\r"}
-re "$ " {send "sudo su\r"}
-re "[sudo] password for subhasish:" {send "$password\r"}
..."
(file "testcase" line 9)
Không chắc chắn tôi đang đi sai. Nó nói tên lệnh không hợp lệ "sudo", tôi đoán điều này là bởi vì mong đợi không hiểu lệnh này. Làm thế nào để đi xung quanh nó. Hãy giúp tôi. Cảm ơn.
Tôi đã thay đổi sudo su mong đợi để "mật khẩu cho subhasish:" và cũng như cách bạn đã đề cập, không phải trường hợp nó làm việc; sử dụng mã được cập nhật bên dưới, #!/usr/bin/expect -f #!/Bin/bash bộ thời gian chờ 60 log_user 1 bộ máy chủ *. *. *. * bộ mật khẩu ****** tập người dùng Subhasish set logfile output.txt spawn ssh -p 10022 $ user @ $ host mong đợi "* assword: *" gửi - "$ password \ r" log_user 1 mong đợi "$" gửi - "sudo su \ r" mong đợi "mật khẩu cho Subhasish:" gửi - - "$ password \ r" mong muốn "#" gửi - "trạng thái dịch vụ iptables \ r" log_file /home/subhasish/output.log mong đợi "#" log_file gửi - "thoát \ r"; gửi - "thoát \ r"; thoát 0 –
nhật ký thủ công trông giống như thế này, [root @ localhost subhasish] # ssh -p 10022 [email protected]*.*.*.* mật khẩu của [email protected]*.*.*.*: Lần đăng nhập gần nhất: Thứ Hai Ngày 29 tháng 4 07:19:52 2013 từ *. *. *.* [Subhasish @ testhost ~] $ sudo su [sudo] password cho Subhasish: [root @ testhost Subhasish] # –
debug script cho thấy nó bị mắc kẹt trong mong đợi: mong đợi: không "\ r \ nLast đăng nhập: Mon Ngày 29 tháng 4 07:35:36 2013 từ *. *. *. * \ R \ r \ n \ u001b] 0; subhasish @ testhost: ~ \ u0007 "(spawn_id exp4) khớp mẫu glob" mật khẩu cho subhasish: "? không [subhasish @ testhost ~] $ kỳ vọng: không "\ r \ nLưu trữ nhanh: Thứ Hai 29 tháng 4 07:35:36 2013 từ *. *. *. * \ r \ r \ n \ u001b] 0; subhasish @ testhost: ~ \ u0007 \ u001b [? 1034h [subhasish @ testhost ~] $ "(spawn_id exp4) khớp mẫu glob" mật khẩu cho subhasish: "? no –