2013-12-13 3 views
1

В моем файле сценария bash я пытаюсь использовать expect, чтобы предоставить пароль для команды ssh, но он не работает. Вот мой сценарий:Невозможно использовать ожидание в сценарии Bash

#!/bin/bash 

/usr/bin/expect << EOD 
spawn ssh [email protected] 
expect "[email protected]'s password:" 
send "mypassword\r" 
interact 
expect eof 
EOD 

И выход после того, как я выполняю скрипт:

[[email protected] Desktop]$ ./login.sh 
spawn ssh [email protected] 
[email protected]'s password: [[email protected] Desktop]$ 

Может кто-то дайте мне знать, как использовать expect в моем сценарии без изменения #!/bin/bash к #!/usr/bin/expect?

+1

Что @ruakh сказал, + изменить пароль прямо сейчас ... – janos

+2

возможно дубликат [Использование ожидать в Баш скрипт, чтобы обеспечить пароль для команды SSH] (http://stackoverflow.com/questions/4780893/use-expect-in-bash-script-to-give-password-to-ssh-command) –

+0

И в любом случае используйте ключевую проверку подлинности, а не взломать с помощью 'ожидать' – janos

ответ

4

Следующие действия выполняются как одна строка сценария bash в терминале OS X. Он предназначен только для использования в защищенной локальной сети. Более подробную информацию можно найти на моем original post.

expect -c 'spawn ssh -o StrictHostKeyChecking=no [email protected]; 
expect assword; send remote-password\r; expect remote-user$; 
send "sudo shutdown -h +1\r"; expect assword; send remote-password\r; interact' 
2

ssh (и любой другой инструмент для чтения пароля) считывает свой пароль не со своего стандартного ввода. Он использует некоторые сложные команды ioctl() - s на своем терминальном устройстве. Это потому, что вы не можете дать им свой пароль в трубе.

Это не большая проблема, потому что широко используемые пароли с открытым текстом нанесли больший вред, как будто иногда нам нужно найти альтернативное решение без пароля.

В случае с ssh для этого есть очень простая вещь. Google для ssh-keygen. Я предлагаю использовать это, настроить ssh без пароля, и все будет хорошо.

+0

Большое вам спасибо @Peter Horvath, это действительно полезное знание. Помимо ssh, в файле сценария bash, у меня также есть такая же проблема, когда автоматически предоставляется пароль для других команд ex: scp, su ... Не могли бы вы рассказать мне об общем решении этой проблемы. Я просто попросил ssh, потому что думал, что у них одинаковое решение. –

+0

Нет. Ssh и scp идут с ssh-keygen. Су не имеет решения, но есть sudo, который имеет. Не забывайте о повышении, пожалуйста. :-) – peterh

+0

Я действительно хочу это сделать, но у меня не было разрешения. Очень жаль. –

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