shell – pexpect – 在ssh上运行script.sh
我在编程上通过ssh运行本地脚本时遇到问题.
我不确定这是否是本地主机上的 shell变量替换的问题. 手动运行时 ssh monit@server1 'bash -s' < /u02/splunk/splunk/etc/apps/Splunk_TA_nix/bin/cpu.sh 我得到了预期的输出,
但我明白了
运行以下代码时, 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 这些是印刷输出,
pexpect正在进入[pP] assword行,所以我猜密码正确传递, 解决方法
这里是pexpect手册的注释:
这是工作线 command = """/bin/bash -c "/usr/bin/ssh %(username)s@%(hostname)s 'bash -s' < %(splunk_bin_dir)s/cpu.sh" """ % locals() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |