2010-08-04 3 views
1

Я использую 'ожидать' для автоматизации аутентификации пароля ssh. Когда я запускаю скрипт в SunOS, я нахожу, что порожденный процесс ssh убивается после завершения этого сценария. В Linux это не так. Как нам избежать этого? Должны ли мы игнорировать сигнал SIGCHLD? Есть ли какой-либо способ определить этот сценарий, если вызванный процесс будет успешным и сообщит об ошибке, если таковая имеется?ожидать команды - Unix

#!/usr/local/bin/expect -f 

set password blah-blah 
spawn ssh -NfL 8002:<test domain>:22 [email protected] 
expect "* password:*" 
send -- "$password\r" 
send -- "\r" 
expect EOF 

-Karthik

+0

Любые указания на этот вопрос? – Kartlee

ответ

1

Если вы используете SSH-ключи, вам не нужно будет кодировать пароли в сценариях оболочки.

Вы можете даже зашифровать ключ парольной фразой и использовать ssh-agent для управления ключом для вас - вы разблокируете свой ключ утром, запустите свой туннель, а затем забудьте свой ключ, когда отправляетесь на обед, откройте свою ключ во второй половине дня, и забудьте снова, когда вы идете домой ночью. Отсутствует волшебный шлюз на диске для удаленных компьютеров.

+0

Спасибо за подсказку. Но я не думаю, что это отвечает на мой главный вопрос. Я ищу способ спросить, чтобы не убить порочный процесс. – Kartlee

+0

Это лучшее решение - ключи ssh - лучший способ обработки автоматизированных логинов. –

+0

@ Kartlee, действительно, я не знаю, ожидаю хорошо, не использовал его в годах. (Для этой же проблемы, пока сотрудник не сказал мне использовать ssh-ключи. Hehe.) – sarnold

1

Вместо того, чтобы команды SSH в фоновом режиме вы можете поместить скрипт ожидать в фоновом режиме:

#!/usr/local/bin/expect -f 

if {[fork] != 0} exit 
disconnect 

set password blah-blah 
spawn ssh -NL 8002:localhost:22 [email protected] 
expect { 
    EOF {exit 1} 
    "assword:" {} 
} 
send -- "$password\n" 
send -- "\n" 
expect EOF 
wait 

работает для меня на Linux. По крайней мере, для этапа настройки, остановить его сложнее. Мне пришлось kill -9 остановить сценарий ожидания. Это, вероятно, также требует убийства процесса ssh.

+0

Оригинальный скрипт отлично работает в Linux. Я вижу разницу только в SunOS. Также предложение, которое вы дали сейчас, похоже, не работает. – Kartlee

+0

Это работает для вас в SunOS? – Kartlee

+0

Решение Douglas отлично работает для меня на Solaris. – jlliagre

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