我不确定这是否是本地主机上的 shell变量替换的问题.
手动运行时
ssh monit@server1 'bash -s' < /u02/splunk/splunk/etc/apps/Splunk_TA_nix/bin/cpu.sh
我得到了预期的输出,
cpu pctUser pctNice pctSystem pctIowait pctIdle
all 11.21 0.00 1.50 0.31 86.98
0 0.00 0.00 0.00 0.00 100.00
1 3.00 0.00 1.00 0.00 96.00
….
但我明白了
bash: /u02/splunk/splunk/etc/apps/Splunk_TA_nix/bin/cpu.sh: No such file or directory
运行以下代码时,
splunk_bin_dir = '/u02/splunk/splunk/etc/apps/Splunk_TA_nix/bin' hostname = 'server1' username = 'monit' password = 'monit#_' command = "/usr/bin/ssh %(username)s@%(hostname)s 'bash -s' < %(splunk_bin_dir)s/cpu.sh" % locals() print command ssh_new_conn = 'Are you sure you want to continue connecting' p = pexpect.spawn(command,timeout=360) # Handles the 3 possible connection outcomes: # a) Ssh to the remote host for the first time,triggering 'Are you sure you want to continue connecting' # b) ask you for password # c) No password is needed at all,because you already have the key. i = p.expect([ssh_new_conn,'[pP]assword:',pexpect.EOF]) print ' Initial pexpect command output: ',i if i == 0: # send 'yes' p.sendline('yes') i = p.expect(['[pP]assword:',pexpect.EOF]) print 'sent yes. pexpect command output',i if i == 0: # send the password p.sendline(password) p.expect(pexpect.EOF) elif i == 1: # send the password p.sendline(password) p.expect(pexpect.EOF) elif i == 2: print "pexpect faced key or connection timeout" pass print p.before
这些是印刷输出,
/usr/bin/ssh monit@server1 ‘bash -s’ < /u02/splunk/splunk/etc/apps/Splunk_TA_nix/bin/cpu.sh
Initial pexpect command output: 1
bash: /u02/splunk/splunk/etc/apps/Splunk_TA_nix/bin/cpu.sh: No such file or directory
pexpect正在进入[pP] assword行,所以我猜密码正确传递,
解决方法
Remember that Pexpect does NOT interpret shell Meta characters such as
redirect,pipe,or wild cards (>,|,or *). This is a common mistake.
If you want to run a command and pipe it through another command then
you must also start a shell.
这是工作线
command = """/bin/bash -c "/usr/bin/ssh %(username)s@%(hostname)s 'bash -s' < %(splunk_bin_dir)s/cpu.sh" """ % locals()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。