Executing remote command with paramiko
Piet van Oostrum
piet at cs.uu.nl
Mon Aug 3 19:26:58 EDT 2009
>>>>> Hussein B <hubaghdadi at gmail.com> (HB) wrote:
>HB> Hey,
>HB> I'm trying to run a sudo guarded command over SSH using paramiko
>HB> +++++++++++++++++++
>HB> s = paramiko.SSHClient()
>HB> s.load_system_host_keys()
>HB> s.connect(hostname, port, username, passwd)
>HB> stdin, stdout, stderr = s.exec_command('sudo -s')
>HB> stdin.write('password\n')
>HB> stdin.flush()
>HB> print 'Flushing'
>HB> stdin, stdout, stderr = s.exec_command('harvester')
>HB> print stdout.read()
>HB> s.close()
>HB> +++++++++++++++++++
>HB> It seems to me that the sudo -s isn't getting executed at all.
>HB> I commented the sudo -s code lines and no error is shown.
>HB> Thanks for help and time.
Your command 'harvester' is not run in the sudo shell, but separately in
a new session. so it will run under 'username', not under 'root'.
You could use
stdin, stdout, stderr = s.exec_command('sudo harvester')
instead.
Or use the lower-level constructs:
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
t = s.get_transport()
chan = t.open_session()
chan.exec_command('sudo -s')
print 'writing password'
chan.send(password + '\n')
print 'write command'
chan.send('whoami\n')
print "try to read"
print chan.recv(9999)
For more control you can use chan.recv_ready() to see if output is available.
--
Piet van Oostrum <piet at cs.uu.nl>
URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4]
Private email: piet at vanoostrum.org
More information about the Python-list
mailing list