我使用ssh
登录到相机,scp
一个tarball到它上面,从tarbal中提取文件,然后运行脚本。不过,我对Pexpect有问题。复制tarball时Pexpect超时。似乎不是要等到它完成。然后它开始对untar命令执行同样的操作,我得到的代码如下:
ssh_newkey = 'Are you sure you want to continue connecting'
copy = pexpect.spawn('ssh service@10.10.10.10')
i=copy.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
copy.sendline('yes')
i=copy.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
copy.sendline("service")
print 'Password Accepted'
copy.expect('service@user:')
copy.sendline('su - root')
i=copy.expect('Password:')
copy.sendline('root')
i=copy.expect('#')
copy.sendline('cd /tmp')
i=copy.expect("#")
copy.sendline('scp user@20.20.20.20:/home/user/tarfile.tar.gz .')
i=copy.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
copy.sendline('yes')
i=copy.expect([ssh_newkey,'password:',pexpect.EOF])
else:
pass
copy.sendline('userpwd')
i=copy.expect('#')
copy.sendline('tar -zxvf tarfile.tar.gz bin/installer.sh')
i=copy.expect("#")
copy.sendline("setsid /tmp/bin/installer.sh /tmp/tarfile.tar.gz > /dev/null 2>&1 &")
elif i==2:
print "I either got key or connection timeout"
else:
pass
有人能帮我找到解决办法吗?
谢谢
你使用pexpect甚至paramiko有什么原因吗?
如果您设置了一个public/private键,那么您只需使用一个示例:
然后按照上面的建议使用paramiko发送命令。
您也可以使用keyfile:
以下类方法将为您提供一个持久会话(尽管它未经测试):
我不确定这是否正确,但我会尝试将超时设置为
None
:根据源代码,pexpect在设置为
None
时似乎没有检查超时。不管怎样,我之所以回答这个问题,尽管我不确定它是否能解决您的问题,是因为我想推荐使用paramiko代替。在过去,我有很好的使用它通过SSH进行通信的经验。
相关问题 更多 >
编程相关推荐