46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import tempfile, pexpect
|
|
|
|
def scp(src_name, dest_name, host, user, password, timeout=30, bg_run=False):
|
|
"""SSH'es to a host using the supplied credentials and executes a command.
|
|
Throws an exception if the command doesn't return 0.
|
|
bgrun: run command in the background"""
|
|
|
|
fname = tempfile.mktemp()
|
|
fout = open(fname, 'w')
|
|
|
|
options = '-q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no'
|
|
if bg_run:
|
|
options += ' -f'
|
|
scp_cmd = 'scp %s %s@%s:%s' % (src_name, user, host, dest_name)
|
|
child = pexpect.spawn(scp_cmd, timeout=timeout, encoding='UTF-8')
|
|
child.expect(['password: '])
|
|
child.sendline(password)
|
|
child.logfile = fout
|
|
|
|
child.expect(pexpect.EOF)
|
|
|
|
|
|
# We expect any of these three patterns...
|
|
#i = child.expect (['Permission denied', 'Terminal type', '[#\$] '])
|
|
#if i==0:
|
|
# print('Permission denied on host. Can\'t login')
|
|
# child.kill(0)
|
|
#elif i==1:
|
|
# print('Login OK... need to send terminal type.')
|
|
# child.sendline('vt100')
|
|
# child.expect('[#\$] ')
|
|
#elif i==2:
|
|
# print('Login OK.')
|
|
# print('Shell command prompt', child.after)
|
|
|
|
child.close()
|
|
fout.close()
|
|
|
|
fin = open(fname, 'r')
|
|
stdout = fin.read()
|
|
fin.close()
|
|
|
|
if 0 != child.exitstatus:
|
|
raise Exception(stdout)
|
|
return stdout
|