2016-10-11 8 views
0

В настоящее время работает образец ниже, но мне нужно итерации через диапазон портов 8801 и 8899. (должно быть в разделе ожидания , стандартный баш для цикла не будет работать здесь).Как я могу выполнить итерацию по диапазону номеров портов, захватить рабочий порт и SSH из ожидаемого

#!/bin/bash 
testFunction(){ 
/usr/bin/expect << EOF 
#!/usr/bin/expect 

spawn ssh [email protected] -p 8802 
expect "password" 

send "password\r" 
expect "$ " 
interact 
EOF 
} 

ответ

-1

Можете вы заменить эту жестко закодированную 8802 в вашем документе DRE с переменной? И тогда вы сможете поместить всю тестовую функцию в цикл, передавая другой порт для каждой итерации.

+0

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

0

Попробуйте использовать переменные среды. Это быстро и грязно, но это работает:

#!/bin/bash 
function testFunction { 
    local TESTPORT=$1 
    expect << EOF 
spawn sshpass -f x ssh -p ${TESTPORT} [email protected] 
expect "$ " 
send -- "w\r" 
expect "$ " 
send "exit\r" 
EOF 
} 
testFunction 8802 
testFunction 8803 

Я также использовал sshpass вместо того, чтобы пароль SSH в сценарии ожидать. Я использовал это, чтобы проверить идею. В этом случае файл «x» имеет в нем пароль (и устанавливается с очень ограничительными разрешениями).