我通常通过以下方式建立ssh隧道:
ssh -ND 6666 -vvv -p 443 user@server
服务器的答案:
[...]
user@server's password:
....
debug1: pledge: network
从那里我知道隧道已经建立。如果不是在vvv模式下,我用netstat检查隧道状态
netstat -tl
下面是我对应的python3脚本:
import pexpect, sys
def ssh_con(host,user,password):
child = pexpect.spawn("ssh -ND 6666 -vvv -p 443 %s@%s" % (user,host))
i = child.expect([pexpect.TIMEOUT, 'password: '])
if i == 0: #timeoutx
print( "ssh connection timeout")
sys.exit(1)
if i == 1:
print("ssh connection ok, sending password...")
child.sendline(password)
i = child.expect([pexpect.TIMEOUT, 'pledge: network'])
if i==0:
print("password timeout issue")
sys.exit(1)
elif i==1:
print("tunnel sould be up and running now")
def main():
host = '206.189.126.158'
user = 'cloudssh.us-jvkgouyg'
password = 'lijuhih'
child = ssh_con( host, user, password)
if __name__ == '__main__':
main()
我有两个主要问题:
一旦隧道启动(“隧道现在应该启动并运行”),bash提示符就会返回,连接立即丢失。(netstat显示FIN_WAIT)
另一件奇怪的事情是,我有一个密码超时(不时)。我只是想知道在密码提示处引入延迟是否是一个好主意
谢谢大家
明白了!readbuffer大小设置为默认值。因此,我需要从ssh命令(-vvv)和所有与详细输出相关的pexpect命令中删除超详细模式。我还需要将无限时间的超时设置为无,或将5分钟的超时设置为300
相关问题 更多 >
编程相关推荐