2012-12-10 2 views
1

Можно создать дубликат:
Using expect to pass a password to sshКак написать скрипт bash, который вводит пароль после первой команды?

Я хочу иметь SSH подключение к удаленной машине и вместо того, чтобы использовать команду SSH вместе с адресом машины и пароль, я просто хочу, чтобы написать маленькая функция, которая выполняет команду ssh на машине и вводит пароль после запроса сервера. Я могу написать часть ssh, но как я могу сделать скрипт, который входит и в пропуск, когда хост просит его?

+1

Не используйте пароли, случайно хранящиеся в текстовом файле! Вместо этого используйте ключ ssh. –

+0

@gniourf_gniourf Это работает только для пароля для входа, а не для подсказок пароля из удаленной команды. – Barmar

ответ

3

Вы можете использовать expect сценарий. Вы можете передать аргументы из строки cmd. Пример кода Я пишу:

#!/usr/bin/expect 

set timeout 100 
set host [lindex $argv 0] 
set username [lindex $argv 1] 
set password [lindex $argv 2] 
set command [lindex $argv 3] 

spawn ssh [email protected]$host $command 
#puts $command 
expect { 
    "(yes/no)?" 
     { 
      send "yes\n" 
      expect "*assword:" { send "$password\n"} 
     } 
    "*assword:" 
     { 
      send "$password\n" 
     } 
    } 
1

Вы можете использовать Expect tool
Это именно то, что вам нужно:

EDIT

#!/usr/bin/expect 
set timeout 60 
set user "yourName" 
set machine "nameOfYourMachine" 
set password "yourPassword" 
set command "command that you want execute via ssh" 
spawn ssh [email protected]$machine 
while {1} { 
expect { 
     eof       {break} 
     "The authenticity of host" {send "yes\r"} 
     "password:"     {send "$password\r"} 
     "*\]"      {send "exit\r"} 
     "bash"      {send "$command"} 
} 
} 
wait 
close $spawn_id 

Просто обойти его, как вам нужно

+0

spawn не работает – erogol

+0

@ Erogol whrite #!/Usr/bin/ожидать как первая строка – Arseniy

+0

все еще не работает и получает нерест: команда не найдена while {1} {: команда не найдена не удалось прочитать файл "{" : no такой файл или каталог Не найдена команда 'eof', вы имели в виду: Команда 'eog' из пакета 'eog' (main) Команда 'eox' из пакета 'keyboard-rg' (вселенная) eof: command не найдено * ssword :: команда не найдена – erogol

Смежные вопросы