2012-01-11 28 views
6

tôi viết sau đây hy vọng kịch bản để tự động đăng nhập ssh từ xa máy Linux Và chạy lệnh "cat /etc/APP_VERSION.txt tập tin"mong đợi kịch bản + làm thế nào để bỏ qua chuỗi nếu không xuất hiện

Đôi khi tôi không được hỏi từ lệnh ssh về-

"Are you sure you want to continue connecting (yes/no)?" 

Vì vậy, trong trường hợp này, mong đợi đầu tiên vẫn chờ chuỗi "(có/không)?" - :(

Và không tiếp tục thứ hai mong đợi - "password:"

Làm thế nào để giải quyết này,

Ý tôi là nếu dòng "Bạn có chắc chắn bạn muốn tiếp tục kết nối (có? ?/không) " là không xuất hiện từ ssh

sau đó, chúng ta phải đi đến tiếp theo mong đợi 'password:', nhưng làm thế nào để làm điều này

remark1 - trong trường hợp câu hỏi" bạn có chắc chắn bạn muốn tiếp tục kết nối (có/không)? ", Xuất hiện sau đó mong đợi kịch bản làm việc tốt mà không có bất kỳ vấn đề .

remark2 - Tôi không thể sử dụng giá trị tích cực thời gian chờ (như thời gian chờ 10) vì ssh bản thân có sự chậm trễ

. . . .

tôi hy vọng kịch bản: (điều này mong đợi là một phần của kịch bản ksh của tôi)

. 
    . 
    . 

    APP_MACHINE=172.12.6.190 


    set timeout -1 
    spawn ssh $APP_MACHINE 
     expect { 
       "(Are you sure you want to continue connecting yes/no)?" 
           { send "yes\r" } 
       } 
     expect password:  {send PASS123\r} 
    expect > {send "cat /etc/APP_VERSION.txt\r"} 
    expect > {send exit\r} 
    expect eof 

. 
. 
. 

. . . . .

ví dụ về ssh từ máy linux của tôi

ssh APP_MACHINE 
    The authenticity of host 'APP_MACHINE (172.12.6.190)' can't be established. 
    RSA key fingerprint is 1e:8a:3d:b3:e2:8c:f6:d6:1b:16:65:64:23:95:19:7b. 
    Are you sure you want to continue connecting (yes/no)? 

Trả lời

7

cài đặt thời hạn

thời gian chờ bộ 10

sẽ chờ đợi cho các dòng dự kiến ​​trong vòng 10 giây, và sau đó chuyển sang sang dòng tiếp theo trong tập lệnh nếu không nhận được trong khoảng thời gian chờ đã chỉ định.

Reference http://linuxshellaccount.blogspot.com/2008/01/taking-look-at-expect-on-linux-and-unix.html

UPDATE: Nếu một thời gian chờ không phải là một giải pháp có thể chấp nhận bạn có thể thử sử dụng một danh sách trả lời thay thế cho ổ kịch bản phía trước.

expect { 
"(Are you sure you want to continue connecting yes/no)?" { send "yes\r"; exp_continue } 
password:            {send PASS123\r; exp_continue} 
} 
+0

Xin lỗi tôi không thể sử dụng vì một số thời gian ssh có kết nối thời gian - đôi khi 5 hoặc 10 giây ai biết? - Đó không phải là giải pháp tốt cho tôi xin lỗi lần nữa, nó phải là giải pháp khác !!! –

+0

Dù sao đây không phải là ý tưởng tốt vì APP của tôi cần chạy nhanh mà không có bất kỳ sự chậm trễ nào từ tập lệnh mong đợi –

+0

Tôi thêm chuỗi exp_continue như bạn hiển thị ở đây nhưng vẫn bị kẹt. –

0

Bạn có thể muốn sử dụng các mô-đun Pexpect cho Python để làm điều này, vì nó có thể cung cấp cho bạn một cái gì đó giống như một trường hợp :)

Để biết thêm chi tiết, xem: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/

+0

thx felix sun, nhưng tôi thích đầu tiên để giải quyết nó trong mong đợi bởi vì tôi có allot mong đợi kịch bản trong của tôi shell script vì vậy tôi không muốn dành thời gian để dịch nó sang pylon nhưng ý tưởng của bạn là tốt cho cod mới –

7

Khi bạn sinh sản SSH, hãy thực hiện điều này:

spawn ssh -o "StrictHostKeyChecking no" "$user\@ip" 
Các vấn đề liên quan