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
Чем больше вопрос, почему делать тебе нужно? Что ты пытаешься сделать? Плохая идея - автоматически заполнять пароли. Практически всегда есть лучший способ. –
@JohnKugelman, который был примером, я хочу заполнить что-то еще. – Noah
'su' - особый случай. Он читается непосредственно с терминального устройства, а не с stdin, поэтому вы не можете подключиться к нему. Вам нужно что-то вроде 'expect'. – FatalError