【发布时间】:2012-06-01 18:16:38
【问题描述】:
所以我有一个程序可以通过 ssh 连接到远程服务器并启动该端的 iperf 服务器。 当它运行时,它将从客户端 iperf 该服务器。
当我静态给出 IP 地址时它工作正常,例如:
p=pexpect.spawn('ssh -t -x paddy@20.20.20.20 ' + iperf)
但当我使用时不是:
p=pexpect.spawn('ssh -t -x paddy@'+ADDRESS+' ' + iperf)
我得到一个:
'pexpect.TIMEOUT'
ADDRESS 肯定会正确输入。 有人对出了什么问题有任何想法吗?
#!/usr/bin/env python
import pexpect
import re
import shutil
import getpass
import struct, fcntl, os, sys, signal, time
def start_Server(iperf, password, ADDRESS):
ssh_newkey = 'Are you sure you want to continue connecting'
fix = ADDRESS+' ' + iperf
p=pexpect.spawn('ssh -t -x paddy@'+ fix)
i=p.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT],1)
if i==0:
print "I say yes"
p.sendline('yes')
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
pwtp = False
trysout = True
while pwtp == False:
trysout = True
p.sendline(password)
loginStuff=p.expect(['Permission denied, please try again.','Permission denied (publickey,password).', '------------------------------------------------------------', pexpect.TIMEOUT,pexpect.EOF],1)
if loginStuff == 0:
password = getpass.getpass("Please enter "+ADDRESS+"'s Password")
elif loginStuff == 1:
print 'Sorry but you faild to login'
sys.exit(0)
pwtp = True
trysout = False
elif loginStuff == 2:
pwtp = True
i=3
elif loginStuff == 4:
pwtp = True
pass
else:
pass
elif i==2:
print "I either got key or connection timeout"
pass
elif i==4:
print "I either got key or connection timeout"
pass
if i==3: #timeout
print fix
print ADDRESS
print 'we find outselfs in a timeout'
print i
pass
return p, password
def RepresentsInt(s):
try:
int(s)
return True
except ValueError:
return False
var = raw_input("Enter the destination IP address: ")
ADDRESS = var
password = getpass.getpass("Please enter "+ADDRESS+"'s Password")
t, password = start_Server('iperf -s', password, ADDRESS)
u, password = start_Server('iperf -u -s', password, ADDRESS)
print ADDRESS
p=pexpect.spawn('ssh -t -x paddy@20.20.20.20 iperf -u -s')
ssh_newkey = 'Are you sure you want to continue connecting'
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i == 0:
print ssh_newkey
elif i == 1:
print 'password:'
elif i == 2:
print pexpect.EOF
else:
print 'Sorry what!?'
print i
【问题讨论】:
-
什么是
iperf变量?ADDRESS是什么? -
两者都是字符串。 ADDRESS 是 IP 地址和 iperf 字符串,其中包含我希望运行的命令,例如'iperf -s'。
-
对不起,连接失败:连接被拒绝并且读取失败:连接被拒绝不是来自 ssh。但我得到一个'pexpect.TIMEOUT'
-
那是相当多的代码。您能否将其简化为一个小的自包含问题,该问题重现您所看到的问题?另外,你能修复你的缩进吗,这在 Python 中非常重要!最后,你能告诉我们ADDRESS是什么吗?!不是用于获取用户输入的代码,而是当您超时时 ADDRESS 的确切值。
-
可能相关:如果您在第一次被要求确认地址时回答“否”,
ADDRESS永远不会设置为var。