kandarp gandhi kandarp gandhi - 5 months ago 41
Python Question

Connecting to SSH using Python

I am trying to use Spur to connect to remote server via SSH. It works well when I give 'ps' and 'aux' argument, it works fine.
When I give 'ps', 'aux', '|', 'grep' and 'java' it gives me an error

spur.results.RunProcessError: return code: 1
output: b''
stderr output: b'ERROR: Garbage option.\n********* simple selection ********* ********* selection by list *********\n-A all processes -C by command name\n-N negate selection -G by real group ID (supports names)\n-a all w/ tty except session leaders -U by real user ID (supports names)\n-d all except session leaders -g by session OR by effective group name\n-e all processes -p by process ID\nT all processes on this terminal -s processes in the sessions given\na all w/ tty, including other users -t by tty\ng OBSOLETE -- DO NOT USE -u by effective user ID (supports names)\nr only running processes U processes for specified users\nx processes w/o controlling ttys t by tty\n*********** output format ********** *********** long options ***********\n-o,o user-defined -f full --Group --User --pid --cols --ppid\n-j,j job control s signal --group --user --sid --rows --info\n-O,O preloaded -o v virtual memory --cumulative --format --deselect\n-l,l long u user-oriented --sort --tty --forest --version\n-F extra full X registers --heading --no-heading --context\n ********* misc options *********\n-V,V show version L list format codes f ASCII art forest\n-m,m,-L,-T,H threads S children in sum -y change -l format\n-M,Z security data c true command name -c scheduling class\n-w,w wide output n numeric WCHAN,UID -H process hierarchy\n'


My code is as following :

import spur

shell = spur.SshShell(hostname='hostname',
username='uname',
password='password')

with shell:
result = shell.run(['ps', 'aux', '| grep java'])
print result.output


Please help me if anyone has faced similar issue

Answer

It should work by doing the following:

import spur

shell = spur.SshShell(hostname='host',
                      username='user',
                      password='password')

with shell:
    result = shell.run(['sh','-c','ps aux | grep java'])
print result.output

In my case the result was:

user  5090  0.0  0.0   9632  2472 ?        Ss   04:06   0:00 sh -c ps aux | grep java
user  5093  0.0  0.0   9116   904 ?        S    04:06   0:00 grep java