Я хочу опубликовать свои выводы.
Самым сложным было выяснить, что ожидать + pbrun.
Поскольку есть 2 интерактивных вопроса, мне пришлось остановиться на секунду после первого вопроса.
Мой expect
код:
#!/usr/bin/expect -f
set timeout 300
set usr [lindex $argv 0];
set pwd [lindex $argv 1];
set query_file [lindex $argv 2];
spawn -noecho pbrun $usr &
expect -re "Password:"
send "$pwd\r"
sleep 1
expect "Enter reason for this privilege access:"
send "test\r"
send "kinit -k -t /opt/Cloudera/keytabs/`whoami`.`hostname -s`.keytab `whoami`/`hostname -f`@YOUR_FQDN_NAME.NET;ssl=true\r"
send "beeline -u 'jdbc:hive2://bigdataplatform-your_dev.net:10000/;principal=hive/bigdataplatform-your_dev.net@YOUR_FQDN_NAME.NET;ssl=true' --outputformat=csv2 --verbose=false --fastConnect=true --silent=true -f $query_file;\r"
expect "*]$\ " {send "exit\r"}
expect eof
Запрос:
select * from gfocnnsg_work.pytest LIMIT 1000000;
Остальное - Питон и Парамико.
Я создаю транспортный объект, выполняю ожидаемый сценарий и сохраняю стандартный вывод в ОС Windows.
Путь доступа к данным:
Windows desktop->
SSH->
Linux login->
pbrun service login->
kinit
beeline->
SQL->
save echo on Windows
Вот скрипт на Python с деталями: hivehoney