2010-05-12 24 views
6

Vì vậy, tôi muốn tự động đăng nhập SSH của mình. Máy chủ tôi không cho phép xác thực khóa trên máy chủ này, vì vậy tôi phải sáng tạo hơn.Đăng nhập SSH với mong đợi (1). Làm thế nào để thoát khỏi mong đợi và vẫn còn trong SSH?

Tôi không biết nhiều về kịch bản lệnh shell, nhưng một số nghiên cứu đã cho tôi thấy lệnh 'mong đợi' và một số tập lệnh sử dụng nó cho mục đích chính xác này. Tôi thiết lập một kịch bản và chạy nó, nó hoạt động hoàn hảo để đăng nhập.

#!/usr/bin/env expect -f 

set password "my_password" 

match_max 1000 

spawn ssh -p 2222 "my_username"@11.22.11.22 

expect "*?assword:*" 
send -- "$password\r" 
send -- "\r" 

expect eof 

Ban đầu, nó chạy như mong muốn.

Last login: Wed May 12 21:07:52 on ttys002 
esther:~ user$ expect expect-test.exp 
spawn ssh -p 2222 [email protected] 
[email protected]'s password: 
Last login: Wed May 12 15:44:43 2010 from 20.10.20.10 


-jailshell-3.2$ 

Nhưng đó là nơi kết thúc thành công.

Lệnh không hoạt động, nhưng nhấn enter chỉ cần tạo một dòng mới. Phím mũi tên và các phím không phải chữ số khác tạo ra các ký hiệu như '^ [[C', '^ [[A', '^ [OQ', v.v. [1]

Không có lời nhắc nào khác xuất hiện ngoại trừ hai lời nhắc ban đầu được tạo bởi tập lệnh mong đợi. Bất kỳ lệnh bị bỏ qua nào sẽ được thực hiện bởi trình bao cục bộ của tôi khi đã có thời gian chờ đợi. Một ví dụ:

-jailshell-3.2$ whoami 
ls 
pwd 
hostname 

(... thời gian trôi qua, hy vọng lần ra ...)

esther:~ user$ whoami 
user 

esther:~ ciaran$ ls 
Books  Documents Movies  Public  
Code  Downloads Music  Sites  
Desktop  Library  Pictures expect-test.exp 

esther:~ ciaran$ pwd 
/Users/ciaran 

esther:~ ciaran$ hostname 
esther.local 

Như tôi đã nói, tôi không có kinh nghiệm vỏ kịch bản, nhưng tôi nghĩ rằng nó được gây ra bởi vì Tôi vẫn "bên trong" mong đợi, nhưng không phải "bên trong" SSH. Có cách nào để chấm dứt mong đợi một khi tôi đã đăng nhập, và có nó bàn giao phiên SSH cho tôi?

Tôi đã thử các lệnh như 'đóng' và 'thoát', sau "gửi -" \ r "". Vâng, họ làm những gì tôi muốn và mong đợi chết, nhưng nó dứt khoát mất phiên SSH xuống với nó, để lại cho tôi trở lại nơi tôi bắt đầu. Những gì tôi thực sự cần là cho mong đợi để làm công việc của mình và chấm dứt, để lại phiên SSH trở lại trong tay của tôi như thể tôi đã làm nó bằng tay.

Tất cả trợ giúp đều được đánh giá cao, cảm ơn. [1] Tôi biết có một cái tên cho điều này, nhưng tôi không biết nó là gì. Và đây là một trong những điều đáng sợ mà không thể googled, bởi vì các ký tự dấu câu được bỏ qua. Như một câu hỏi phụ, câu chuyện ở đây là gì?

Trả lời

15

Tôi nghĩ vấn đề của bạn đã được giải quyết ở đây trước:

Using expect to pass a password to ssh

Lệnh bạn đang muốn tìm interact. Nó trao quyền kiểm soát cho bạn/bàn phím của bạn.

2

Tôi đã sử dụng tập lệnh tương tự để tự động nhận dạng.

Tôi đã sử dụng "tương tác" và tôi đã xóa "mong đợi eof". Bằng cách này, tôi có thể lấy lại màn hình để tôi có thể nhập các lệnh bằng tay.

expect "?assword: " 
send -- "$password\r" 
expect "$" 
interact 
0

đặt nó tất cả cùng nhau, đăng nhập của bạn và để lại cho bạn trên dòng lệnh chính xác như bạn đã gõ nó bằng tay

#!/usr/bin/expect -f 
set ip "127.001.001.001" 
set password "xxyykkx" 
spawn ssh $ip -l root 
expect "?assword:" 
send "$password\r" 
interact 
Các vấn đề liên quan