2016-06-24 3 views
0

파이썬 패브릭 모듈을 사용하여 원격 쉘 명령을 실행하는 모듈로 작업 중입니다.파이썬 : 패브릭 모듈의 일관성없는 연결

내 기본 컴퓨터는 CentOS 7 배포판에서 실행되는 Linux 컴퓨터이며 원격 컴퓨터는 FreeBSD 배포판입니다.

내가 직면하고있는 문제는 다소 혼란 스럽습니다.

문제는 때때로 직물은 원격 시스템에서 명령을 실행하고 차질없이 출력을 게시 할 것입니다,하지만 때로는 오류 MSG 보여줍니다

fabric.exceptions.NetworkError: Low level socket error connecting to host *.*.*.* on port 22: Unable to connect to port 22 on *.*.*.* 

내가 그 뒤에 원인을 찾을 수없는 생각은.

내 코드

#!/usr/bin/env python 

###################### IMPORTS ########################## 
from __future__ import with_statement 
from fabric.api import * 
import sys 
import csv 
import re 
######################################################### 

def data_collector(): 

    with hide('output','running','warnings'), settings(warn_only=True): 
     env.hosts = '*.*.*.*' 
     env.user = 'root' 
     env.password = '*********' 
     env.port = 22 
       env.connection_attempts = 1 
       print(env) 
       return run("zfs list") 


def import_text(): 
     raw_data = data_collector() 
    #print(filename) 
    line = raw_data.split('\n') 
    #print(line[0]) 
    final = list() 
    for l in line: 
     final.append(re.sub(r'\s+', ',', l)) 

     final.pop(0) 
    for l in final: 
     print(l[4]) 
import_text() 

내 호스트의 (CentOS의 7 기계) sshd_config 파일이

# $OpenBSD: sshd_config,v 1.93 2014/01/10 05:59:19 djm Exp $ 

# This is the sshd server system-wide configuration file. See 
# sshd_config(5) for more information. 

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin 

# The strategy used for options in the default sshd_config shipped with 
# OpenSSH is to specify options with their default value where 
# possible, but leave them commented. Uncommented options override the 
# default value. 

# If you want to change the port on a SELinux system, you have to tell 
# SELinux about this change. 
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER 
# 
#Port 22 
#AddressFamily any 
#ListenAddress 0.0.0.0 
#ListenAddress :: 

# The default requires explicit activation of protocol 1 
#Protocol 2 

# HostKey for protocol version 1 
#HostKey /etc/ssh/ssh_host_key 
# HostKeys for protocol version 2 
HostKey /etc/ssh/ssh_host_rsa_key 
#HostKey /etc/ssh/ssh_host_dsa_key 
HostKey /etc/ssh/ssh_host_ecdsa_key 
HostKey /etc/ssh/ssh_host_ed25519_key 

# Lifetime and size of ephemeral version 1 server key 
#KeyRegenerationInterval 1h 
#ServerKeyBits 1024 

# Ciphers and keying 
#RekeyLimit default none 

# Logging 
# obsoletes QuietMode and FascistLogging 
#SyslogFacility AUTH 
SyslogFacility AUTHPRIV 
#LogLevel INFO 

# Authentication: 

#LoginGraceTime 2m 
#PermitRootLogin yes 
#StrictModes yes 
#MaxAuthTries 6 
#MaxSessions 10 

#RSAAuthentication yes 
#PubkeyAuthentication yes 

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 
# but this is overridden so installations will only check .ssh/authorized_keys 
AuthorizedKeysFile .ssh/authorized_keys 

#AuthorizedPrincipalsFile none 

#AuthorizedKeysCommand none 
#AuthorizedKeysCommandUser nobody 

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts 
#RhostsRSAAuthentication no 
# similar for protocol version 2 
#HostbasedAuthentication no 
# Change to yes if you don't trust ~/.ssh/known_hosts for 
# RhostsRSAAuthentication and HostbasedAuthentication 
#IgnoreUserKnownHosts no 
# Don't read the user's ~/.rhosts and ~/.shosts files 
#IgnoreRhosts yes 

# To disable tunneled clear text passwords, change to no here! 
#PasswordAuthentication yes 
#PermitEmptyPasswords no 
PasswordAuthentication yes 

# Change to no to disable s/key passwords 
#ChallengeResponseAuthentication yes 
ChallengeResponseAuthentication no 

# Kerberos options 
#KerberosAuthentication no 
#KerberosOrLocalPasswd yes 
#KerberosTicketCleanup yes 
#KerberosGetAFSToken no 
#KerberosUseKuserok yes 

# GSSAPI options 
GSSAPIAuthentication yes 
GSSAPICleanupCredentials no 
#GSSAPIStrictAcceptorCheck yes 
#GSSAPIKeyExchange no 
#GSSAPIEnablek5users no 

# Set this to 'yes' to enable PAM authentication, account processing, 
# and session processing. If this is enabled, PAM authentication will 
# be allowed through the ChallengeResponseAuthentication and 
# PasswordAuthentication. Depending on your PAM configuration, 
# PAM authentication via ChallengeResponseAuthentication may bypass 
# the setting of "PermitRootLogin without-password". 
# If you just want the PAM account and session checks to run without 
# PAM authentication, then enable this but set PasswordAuthentication 
# and ChallengeResponseAuthentication to 'no'. 
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several 
# problems. 
UsePAM yes 

#AllowAgentForwarding yes 
#AllowTcpForwarding yes 
#GatewayPorts no 
X11Forwarding yes 
#X11DisplayOffset 10 
#X11UseLocalhost yes 
#PermitTTY yes 
#PrintMotd yes 
#PrintLastLog yes 
#TCPKeepAlive yes 
#UseLogin no 
UsePrivilegeSeparation sandbox  # Default for new installations. 
#PermitUserEnvironment no 
#Compression delayed 
#ClientAliveInterval 0 
#ClientAliveCountMax 3 
#ShowPatchLevel no 
#UseDNS yes 
#PidFile /var/run/sshd.pid 
#MaxStartups 10:30:100 
#PermitTunnel no 
#ChrootDirectory none 
#VersionAddendum none 

# no default banner path 
#Banner none 

# Accept locale-related environment variables 
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES 
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT 
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE 
AcceptEnv XMODIFIERS 

# override default of no subsystems 
Subsystem sftp /usr/libexec/openssh/sftp-server 

# Example of overriding settings on a per-user basis 
#Match User anoncvs 
# X11Forwarding no 
# AllowTcpForwarding no 
# PermitTTY no 
# ForceCommand cvs server 

어떤 생각을 왜처럼 보인다> this-처럼 보이는 ????

+0

아마도 원격 시스템이 항상 제때 응답하지 않고 (기본값 인 10보다 높은'env.timeout'을 사용하거나) 캐시 된 연결이 낡은 것입니다 (기본값 인 1보다 높은'env.connection_attempts '사용). – fernandezcuesta

+0

@ fernandezcuesta, 귀하의 시간과 회신에 대한 탁신,하지만 문제는 여전히 존재합니다. 때로는 작동하지 않는 경우도 있습니다. –

답변

0

나는이 문제가 껍질에 의해 전송 된 패킷의 MTU (최대 전송 단위)로 인한 것임을 알아 냈습니다. 때로는 수신 측에서는 큰 크기로 패킷이 떨어졌습니다.