Есть на баше скрипт, который создает файл с паролями keepass
#!/bin/bash
url="https://10.8.0.1"
pass_kp="$USER_KEE_PASS"
pass_vpn="$USER_PASS"
pass_z="$Z_PASS"
pass_tcp="$USER_TCP_PASS"
user_none="$USER"
#export PATH_KEE=$USER."kdbx"
echo $PATH_KEE
expect <
"
send "mkdir clickme
"
send "cd clickme
"
send new
expect Title:
send vpn
expect Username:
send none
send "$pass_vpn
"
send "$pass_vpn
"
expect URL:
send
send
send new
expect Title:
send z
expect Username:
send $USER
expect Password:
send "$Z_PASS
"
expect "Retype to verify:"
send "$Z_PASS
"
expect URL:
send
send
send new
expect Title:
send secr_razd
expect Username:
send none
expect Password:
send "$USER_TCP_PASS
"
expect "Retype to verify:"
send "$USER_TCP_PASS
"
expect URL:
send
send
send new
expect Title:
send translations
expect Username:
send $USER
expect Password:
send "$USER:$USER_ICE_PASS
"
expect "Retype to verify:"
send "$USER:$USER_ICE_PASS
"
expect URL:
send
send
send "saveas /path/kee/$PATH_KEE
"
send "$pass_kp
"
send "$pass_kp
"
send quit
expect
EOF
Который нормально создает файл file.kdbx
Решил перепиать его на Питоне
# -*- coding: utf -*-
import os,sys
import pexpect
url='https://10.8.0.1'
path='/home/firefedot/'
pass_kp='cjcfnm'
pass_v='cjcfn'
pass_z='cjcfnm'
pass_tcp='cjcfnm'
user="userus1"
k=pexpect.spawn('/usr/bin/kpcli')
k.sendline("rmdir eMail")
k.sendline ('rmdir Internet')
k.sendline ('mkdir clickme')
k.sendline ('cd clickme')
k.sendline ('new')
k.expect ('Title:')
k.sendline ('v')
k.expect ('Username:')
k.sendline ('none')
k.sendline (pass_v)
k.sendline (pass_v)
k.expect ('URL:')
k.sendline ('
')
k.sendline ('
')
k.sendline ('new')
k.expect ('Title:')
k.sendline ('z')
k.expect ('Username:')
k.sendline (user)
k.expect ('Password:')
k.sendline (pass_z)
k.expect ('Retype to verify:')
k.sendline (pass_z)
k.expect ('URL:')
k.sendline (url)
k.sendline ('
')
k.sendline ('new')
k.expect ('Title:')
k.sendline ('secr')
k.expect ('Username:')
k.sendline ('none')
k.expect ('Password:')
k.sendline (pass_tcp)
k.expect ('Retype to verify:')
k.sendline (pass_tcp)
k.expect ('URL:')
k.sendline ('
')
k.sendline ('
')
k.sendline ('saveas '+path+user+'.kdbx')
k.sendline (pass_kp)
k.sendline (pass_kp)
k.sendline ('quit')
#k.interact()
os.chdir(path)
print(os.getcwd())
print (os.system('ls | grep user'))
Скрипт запускается, немного думает и выдает
/home/firefedot - print(os.getcwd())
256 - print (os.system('ls | grep user'))
То есть файл не создается, но чтото делает. проверил на Fedora 22, CentOS7, питона 2 и 3. одинаковый результат.
Думал, может прав скрипту не хватает, хоть и домашняя директория, но не помогло. Запускаю pdb он проходит по всем строчкам и тоже не показывает ничего.
Получается, что он проделывает все операции, а сохранить не может.
Где и как можно поправить?
Ответ
Вот такой код дождется закрытия kpcli и в итоге cаздаст файл.
# -*- coding: utf -*-
import os,sys
import pexpect
url='https://10.8.0.1'
path='/home/firefedot/'
pass_kp='cjcfnm'
pass_v='cjcfn'
pass_z='cjcfnm'
pass_tcp='cjcfnm'
user="userus1"
k=pexpect.spawn('/usr/bin/kpcli')
k.sendline("rmdir eMail")
k.sendline ('rmdir Internet')
k.sendline ('mkdir clickme')
k.sendline ('cd clickme')
k.sendline ('new')
k.expect ('Title:')
k.sendline ('v')
k.expect ('Username:')
k.sendline ('none')
k.sendline (pass_v)
k.sendline (pass_v)
k.expect ('URL:')
k.sendline ('
')
k.sendline ('
')
k.sendline ('new')
k.expect ('Title:')
k.sendline ('z')
k.expect ('Username:')
k.sendline (user)
k.expect ('Password:')
k.sendline (pass_z)
k.expect ('Retype to verify:')
k.sendline (pass_z)
k.expect ('URL:')
k.sendline (url)
k.sendline ('
')
k.sendline ('new')
k.expect ('Title:')
k.sendline ('secr')
k.expect ('Username:')
k.sendline ('none')
k.expect ('Password:')
k.sendline (pass_tcp)
k.expect ('Retype to verify:')
k.sendline (pass_tcp)
k.expect ('URL:')
k.sendline ('
')
k.sendline ('
')
k.sendline ('saveas '+path+user+'.kdbx')
k.sendline (pass_kp)
k.sendline (pass_kp)
time.sleep(0.6)
k.sendline ('quit')
k.close() # Вот эта строчка решила проблему
Спасибо за подсказку.
Комментариев нет:
Отправить комментарий