среда, 21 июля 2010 г.

linux автоматическая авторизация в разных системах

#!/usr/bin/expect -f
set timeout 20
spawn /usr/kerberos/bin/kinit -r 30d user@KTDOMAIN
expect "Password for workuser@KTDOMAIN:" { send "password\n" }
interact

скрипт получает тикет от Active Directory, очень важна строка "set timeout 30" (например задержки в 20 секунд не хватает поэтому нужно проверять хватает ли времени) - скрипт не будет без нее работать в crontab.

если в скрипте не только еxpect, то есть есть еще куча команд (использовал источник
http://stackoverflow.com/questions/10393848/using-expect-in-bash-script)

#!/bin/bash
cd /var/www/domains/bridge.com/
echo "Updating Source start"
expect <<- DONE
  set timeout  -1
  spawn git pull
  expect "*?assword:*"
  send -- "b15\r"
  send -- "\r"
  expect eof
DONE
echo "Updating Source done"

ясное дело если есть переменные (смотрим вышеприведенный источник нужно писать в начале скрипта #!/usr/bin/env bash)

но если сессия должна остаться и вы будете дальше что-то вводить (interact), то конечно нужно использовать конструкции вроде (источник http://blog.omnidarren.com/2011/04/quick-and-dirty-telnet-script-for-switches-in-bash/)

#!/bin/bash
(expect -c "
set timeout  20
spawn /usr/bin/telnet $1
expect \"Username:\"
send \"user\r\"
expect \"Password:\"
send \"pass\r\"
expect \">\"
send \"enable\r\"
expect \"Password:\"
send \"pass_en\r\"
interact
exit
")



Комментариев нет:

Отправить комментарий