2012-11-08 26 views
6

Tôi nhận thấy câu hỏi này đã được hỏi một vài lần nhưng tôi không thể tìm thấy câu trả lời có liên quan ở bất kỳ đâu trong tìm kiếm của mình.Bash Script để SSH vào máy mà không cần nhắc mật khẩu và không sử dụng các phím

Tôi đang làm việc trong môi trường phát triển nơi an ninh không phải là vấn đề và bất kỳ ai cũng có thể đoán mật khẩu nếu suy nghĩ trong vài giây.

Điều tôi đang cố gắng làm là đơn giản. Tôi đã tạo một hàm bí danh trong tệp .bashrc cục bộ của mình và tôi muốn chức năng này tự động đăng nhập vào một máy có mật khẩu mặc định.

thực hiện hiện tại của tôi trông giống như sau:

function s() { 
ssh [email protected]$1 
} 

Khi tôi chạy nó tôi nhận được một cái gì đó như thế này:

~]s 122 

ssh [email protected] 

[email protected]'s password: 

Sử dụng Bash, và không sử dụng các phím RSA Tôi muốn có được điều này để sử dụng mật khẩu mặc định 'mật khẩu'.

Tôi đã thử những điều sau đây nơi IP và Người dùng đã được đặt.

Do=$(expect -c " 
spawn ssh [email protected]${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
expect \"yes/no\" 
send \"yes\r\" 
expect \"assword\" send \"password\"") 
echo $Do 
$Do 

Nó cung cấp cho các lỗi follwing:

Connecting and logging into server using expect 
usage: send [args] string 
    while executing 
"send" 
    invoked from within 
"expect "assword" send "password"" 
[email protected]'s password: 
bash: spawn: command not found... 

Sử dụng lệnh sau đây tôi có thể kết nối một máy. Nếu tôi loại bỏ tương tác, nó chỉ chạy lệnh thời gian hoạt động và đóng kết nối. Với lệnh tương tác, tôi không thể nhìn thấy những gì tôi đang gõ hoặc thực sự tương tác với máy. Bất kỳ ý tưởng?

Do=$(expect -c "spawn ssh [email protected]${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do; 
+0

Liệu lệnh spawn thiết lập môi trường? Nếu không thì đường dẫn sẽ không được thiết lập và nó sẽ không biết nơi để tìm 'ssh'. Thử đặt đường dẫn đầy đủ đến tệp thực thi. – Jay

+0

Chỉ cần tự hỏi, những gì aversion của bạn để RSA phím? Điều đầu tiên tôi luôn làm khi thiết lập một hệ thống mới là cho phép một khóa RSA. – mpontillo

+0

Tôi không muốn làm việc với các khóa RSA bởi vì tôi đang làm việc với rất nhiều máy chủ khác nhau có tuổi thọ rất hạn chế và tập lệnh này sẽ được nhiều người sử dụng. Ý tưởng là tiết kiệm thời gian bằng cách không phải nhập cùng một mật khẩu mỗi lần. Nếu tôi phải gõ mật khẩu vào mỗi lần đầu tiên tôi truy cập vào một máy mới để ssh-copy-id các phím trên nó sẽ đánh bại mục đích. – SuperTetelman

Trả lời

7

Bạn có thể làm điều này với công cụ expect: http://expect.sourceforge.net/

Đó là phổ biến rộng rãi, vì vậy tùy thuộc vào hệ thống của bạn, tương đương với sudo apt-get install expect hoặc yum install expect sẽ cài đặt nó.

Dưới đây là ví dụ về tập lệnh expect với ssh. Đây đăng nhập bạn vào và cung cấp cho bạn kiểm soát các dấu nhắc tương tác:

#!/usr/bin/expect 

set login "root" 
set addr "127.0.0.1" 
set pw "password" 

spawn ssh [email protected]$addr 
expect "[email protected]$addr\'s password:" 
send "$pw\r" 
expect "#" 
send "cd /developer\r" 
interact 

Dưới đây là một ví dụ về cách sử dụng expect như một phần của một kịch bản bash. Điều này đăng nhập với ssh, cd đến/var, chạy một kịch bản, sau đó thoát khỏi phiên ssh.

#!/bin/bash 
... 

login_via_ssh_and_do_stuff() { 

    # build the expect script in bash 

    expect_sh=$(expect -c " 
    spawn ssh [email protected] 
    expect \"password:\" 
    send \"password\r\" 
    expect \"#\" 
    send \"cd /var\r\" 
    expect \"#\" 
    send \"chmod +x my_script.sh\r\" 
    expect \"#\" 
    send \"./my_script.sh\r\" 
    expect \"#\" 
    send \"exit\r\" 
    ") 

    # run the expect script 
    echo "$expect_sh" 
} 

Bạn có thể để lại các đoạn mã này trong một tập lệnh trên hệ thống cục bộ của mình và sau đó chỉ là bí danh cho tập lệnh.

Ngoài ra: Tôi biết bạn nói bảo mật không phải là vấn đề, nhưng tôi muốn lưu ý, một lần nữa, rằng cách "thích hợp" để ssh mà không sử dụng mật khẩu là sử dụng khóa ssh =)

+0

@Kevin: Phủ định: http://www.pantz.org/software/expect/expect_examples_and_tips.html –

+1

Tôi đã sử dụng cả \ n và \ r cho các tập lệnh mong đợi. Là một trong những đề nghị khác? – SuperTetelman

4

Sử dụng sshpass có sẵn trong kho gói trên Linux-es chính.

Ví dụ, khi mật khẩu là trong password.txt file:

sshpass -fpassword.txt ssh [email protected] 

sshpass runs ssh in a dedicated tty , fooling it into thinking it is getting the password from an interactive user.

Các vấn đề liên quan