2013-04-15 3 views
1

Мне интересно, как добавить ответ в команду в сценарии оболочки. Я знаю, что это не очень понятно, так как я не знаю, как это описать. Например:Добавить ответ на команду в сценарии оболочки

$> su 
$> Password: <automatically_fill_in_the_password_here> 

Как я могу автоматически ввести пароль?

+0

Чем больше вопрос, почему делать тебе нужно? Что ты пытаешься сделать? Плохая идея - автоматически заполнять пароли. Практически всегда есть лучший способ. –

+0

@JohnKugelman, который был примером, я хочу заполнить что-то еще. – Noah

+1

'su' - особый случай. Он читается непосредственно с терминального устройства, а не с stdin, поэтому вы не можете подключиться к нему. Вам нужно что-то вроде 'expect'. – FatalError

ответ

1

expect - это то, что вы ищете.

Позвольте мне процитировать this page, как это делает очень хорошую работу в объяснении expect:

Ожидать является автоматизация и инструмент тестирования Unix и Linux. Он работает с интерактивными приложениями, такими как telnet, ftp, passwd, fsck, rlogin, tip, ssh и многие другие. Он использует псевдотерминалы Unix для прозрачной обработки подпроцессов, что позволяет автоматизировать произвольные приложения, которые доступны через терминал.

Ниже приведен простой сценарий ожидания для отправки пароля root/admin для OpenSSH для удаленного ssh-сервера и выполнения команд Unix/Linux/BSD. (. Во-первых, вам нужно install expect tool by following these instructions)

#!/usr/bin/expect -f 
# Expect script to supply root/admin password for remote ssh server 
# and execute command. 
# This script needs three argument to(s) connect to remote server: 
# password = Password of remote UNIX server, for root user. 
# ipaddr = IP Addreess of remote UNIX server, no hostname 
# scriptname = Path to remote script which will execute on remote server 
# For example: 
# ./sshlogin.exp password 192.168.1.11 who 
# ------------------------------------------------------------------------ 
# Copyright (c) 2004 nixCraft project <http://cyberciti.biz/fb/> 
# This script is licensed under GNU GPL version 2.0 or above 
# ------------------------------------------------------------------------- 
# This script is part of nixCraft shell script collection (NSSC) 
# Visit http://bash.cyberciti.biz/ for more information. 
# ---------------------------------------------------------------------- 
# set Variables 
set password [lrange $argv 0 0] 
set ipaddr [lrange $argv 1 1] 
set scriptname [lrange $argv 2 2] 
set arg1 [lrange $argv 3 3] 
set timeout -1 
# now connect to remote UNIX box (ipaddr) with given script to execute 
spawn ssh [email protected]$ipaddr $scriptname $arg1 
match_max 100000 
# Look for passwod prompt 
expect "*?assword:*" 
# Send password aka $password 
send -- "$password\r" 
# send blank line (\r) to make sure we get back to gui 
send -- "\r" 
expect eof 

В Cas один не читал комментарии сценария (вы действительно должны), вот как его использовать:

./sshlogin.exp password 192.168.1.11 who 
+0

Спасибо! Единственным недостатком этого является то, что он не работает на Mac, (я не думаю), но я уверен, что у Macports есть порт. Если бы я хотел распространять проект, в котором я использовал это, мне нужно было бы установить его на компьютер тоже, верно? Благодаря, – Noah