使用Python连接到SSH

时间:2016-06-24 21:52:05

标签: python shell ssh automation

我正在尝试使用Spur通过SSH连接到远程服务器。当我给'ps'和'aux'参数时,它运行良好,它工作正常。 当我给'ps','aux','|','grep'和'java'时它会给我一个错误

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'

我的代码如下:

import spur

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

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

如果有人遇到类似的问题,请帮助我

2 个答案:

答案 0 :(得分:1)

它应该通过以下方式起作用:

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

在我的情况下,结果是:

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

答案 1 :(得分:0)

感谢Mostafa的回答。使用Pexpect后,我获得了相同的结果。在这里我的代码。我希望它能帮助其他用户。

def connect():
    s = pxssh.pxssh()
    hostname = 'host'
    username = 'name'
    password = 'password'

    if not s.login(hostname, username, password):
        print 'SSH login failed'
        print str(s)
    else:
        print 'SSH ok'
        s.sendline(' ps -eo pid,cmd,etime | grep java')
        s.prompt()
        arr = s.before.split('\n')
        arr_1 = arr[1].split(' ')
        print 'Uptime for the following process is ', arr_1[-1]
        s.logout()