def loginandcopy(hostname,uname,pwd,sfile,tfile):
try:
log.info("Establishing ssh connection")
client = getsshClient()
client.load_system_host_keys()
client.connect(hostname)#,username=uname)#,password=pwd)
except paramiko.AuthenticationException:
print("Authentication failed, please verify your credentials: %s")
except paramiko.SSHException as sshException:
print("Unable to establish SSH connection: %s" % sshException)
except paramiko.BadHostKeyException as badHostKeyException:
print("Unable to verify server's host key: %s" % badHostKeyException)
except Exception as e:
print(e.args)
try:
log.info("Getting SCP Client")
scpclient = scp.SCPClient(client.get_transport())
log.info(scpclient)
log.info("Hostname: %s", hostname)
log.info("source file: %s", sfile)
log.info("target file: %s", tfile)
scpclient.put(sfile,tfile)
except scp.SCPException as e:
print("Operation error: %s", e)
python类BadHostKeyException()的实例源码
def connect(self, num_retries=5):
retry = 0
while retry < num_retries:
try:
self._ssh_client.connect(self.server.hostname,
username=self.uname,
pkey=self._pkey)
return
except socket.error, (value, message):
if value in (51, 61, 111):
print 'SSH Connection refused, will retry in 5 seconds'
time.sleep(5)
retry += 1
else:
raise
except paramiko.BadHostKeyException:
print "%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname
print 'Edit that file to remove the entry and then hit return to try again'
raw_input('Hit Enter when ready')
retry += 1
except EOFError:
print 'Unexpected Error from SSH Connection, retry in 5 seconds'
time.sleep(5)
retry += 1
print 'Could not establish SSH connection'
def loginandrun(hostname,uname,pwd,command):
try:
log.info("Establishing ssh connection")
client = getsshClient()
client.load_system_host_keys()
client.connect(hostname)#,username=uname)#,password=pwd)
except paramiko.AuthenticationException:
print("Authentication failed, please verify your credentials: %s")
except paramiko.SSHException as sshException:
print("Unable to establish SSH connection: %s" % sshException)
except paramiko.BadHostKeyException as badHostKeyException:
print("Unable to verify server's host key: %s" % badHostKeyException)
try:
stdin, stdout, stderr = client.exec_command(command)
result = stderr.read()
if len(result) > 0:
print("hit error" + result)
except Exception as e:
print("Operation error: %s", e)
# Any new implementation to use this method
def loginandcopydir(hostname,uname,pwd,sfile,tfile,recursive,preserve_times):
try:
log.info("Establishing ssh connection")
client = getsshClient()
client.load_system_host_keys()
client.connect(hostname) #,username=uname)#,password=pwd)
except paramiko.AuthenticationException:
print("Authentication failed, please verify your credentials: %s")
except paramiko.SSHException as sshException:
print("Unable to establish SSH connection: %s" % sshException)
except paramiko.BadHostKeyException as badHostKeyException:
print("Unable to verify server's host key: %s" % badHostKeyException)
except Exception as e:
print(e.args)
try:
scpclient = scp.SCPClient(client.get_transport())
scpclient.put(sfile,tfile,recursive,preserve_times)
except scp.SCPException as e:
print("Operation error: %s", e)
# Deprecated
def ssh(config, host):
"""
Check that a host is running SSH
:param config: Unused
:param host: The host to check
:return: 3-tuple of (success, name, message)
success: Boolean value indicating if there is a problem or not
name: DNS name
message: String describing the status
"""
del config
name = host
try:
ssh_conn = paramiko.SSHClient()
ssh_conn.set_missing_host_key_policy(
paramiko.client.MissingHostKeyPolicy())
ssh_conn.connect(host)
return True
except (paramiko.BadHostKeyException, paramiko.AuthenticationException,
paramiko.SSHException, socket.error) as e:
return (False, name, "Unable to SSH to %s %s %s"
% (host, e.__class__, e))
def connect(self, num_retries=5):
retry = 0
while retry < num_retries:
try:
self._ssh_client.connect(self.server.hostname,
username=self.uname,
pkey=self._pkey)
return
except socket.error, (value, message):
if value in (51, 61, 111):
print 'SSH Connection refused, will retry in 5 seconds'
time.sleep(5)
retry += 1
else:
raise
except paramiko.BadHostKeyException:
print "%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname
print 'Edit that file to remove the entry and then hit return to try again'
raw_input('Hit Enter when ready')
retry += 1
except EOFError:
print 'Unexpected Error from SSH Connection, retry in 5 seconds'
time.sleep(5)
retry += 1
print 'Could not establish SSH connection'
def connect(self, num_retries=5):
retry = 0
while retry < num_retries:
try:
self._ssh_client.connect(self.server.hostname,
username=self.uname,
pkey=self._pkey)
return
except socket.error, (value, message):
if value in (51, 61, 111):
print 'SSH Connection refused, will retry in 5 seconds'
time.sleep(5)
retry += 1
else:
raise
except paramiko.BadHostKeyException:
print "%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname
print 'Edit that file to remove the entry and then hit return to try again'
raw_input('Hit Enter when ready')
retry += 1
except EOFError:
print 'Unexpected Error from SSH Connection, retry in 5 seconds'
time.sleep(5)
retry += 1
print 'Could not establish SSH connection'
control_gpio_GUI.py 文件源码
项目:Remote_raspberrypi_GPIO_Control
作者: Rahul14singh
项目源码
文件源码
阅读 31
收藏 0
点赞 0
评论 0
def trySSHConnect(self,host, portNum):
paramiko.util.log_to_file ('paramiko.log')
try:
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(host,port=portNum,username="pi", password="raspberry")
self.ssh.get_transport().window_size = 3 * 1024 * 1024
command='python /home/pi/Desktop/control_gpio_pi/initial_check.py'
stdin,stdout,stderr = self.ssh.exec_command(command)
print('\nstout:',stdout.read())
except paramiko.AuthenticationException:
print ("Authentication failed!")
return -1
except paramiko.BadHostKeyException:
print ("BadHostKey Exception!")
return -1
except paramiko.SSHException:
print ("SSH Exception!")
self.ssh.close()
return -1
except socket.error as e:
print ("Socket error ", e)
return -1
except:
print ("Could not SSH to %s, unhandled exception" % host)
return -1
print ("Made connection to " + host + ":" + str(portNum))
return 0
def exec_cmd(self, ip_addr, username, password, cmd,
ssh_log=None, look_for_keys=True, key_filename=None):
if ssh_log is not None:
self.SSH_LOG = ssh_log
if self.log.get_level() == Logger.DEBUG:
paramiko.util.log_to_file(self.SSH_LOG)
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(
ip_addr,
port=self.SWITCH_PORT,
username=username,
password=password,
look_for_keys=look_for_keys,
key_filename=key_filename)
except (
paramiko.BadHostKeyException,
paramiko.AuthenticationException,
paramiko.SSHException,
socket.error,
BaseException) as exc:
self.log.error('%s: %s' % (ip_addr, str(exc)))
raise SSH_Exception('SSH connection Failure - {}'.format(exc))
# sys.exit(1)
try:
_, stdout, stderr = ssh.exec_command(cmd)
except paramiko.SSHException as exc:
self.log.error('%s: %s, %s' % (ip_addr, str(exc), stderr.read()))
sys.exit(1)
stdout_ = stdout.read()
stderr_ = stderr.read()
status = stdout.channel.recv_exit_status()
ssh.close()
return status, stdout_, stderr_
def __init__(self, host, log=None, ssh_log=None, username=None,
password=None, look_for_keys=True, key_filename=None):
paramiko.SSHClient.__init__(self)
self.host = host
self.log = log
self.ssh_log = ssh_log
if ssh_log is not None:
paramiko.util.log_to_file(ssh_log)
elif log is not None:
if self.log.get_level() == Logger.DEBUG:
ssh_log = FILE_PATH[:FILE_PATH.rfind('/')]
ssh_log += '/ssh_paramiko.log'
paramiko.util.log_to_file(ssh_log)
if key_filename is None:
self.load_system_host_keys()
self.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
self.connect(
host,
username=username,
password=password,
look_for_keys=look_for_keys,
key_filename=key_filename)
except (
paramiko.BadHostKeyException,
paramiko.AuthenticationException,
paramiko.SSHException,
socket.error,
BaseException) as exc:
if log is not None:
self.log.error('%s: %s' % (host, str(exc)))
else:
print('%s: %s' % (host, str(exc)))
raise SSH_Exception('Connection Failure - {}'.format(exc))
def connect(self, num_retries=5):
"""
Connect to an SSH server and authenticate with it.
:type num_retries: int
:param num_retries: The maximum number of connection attempts.
"""
retry = 0
while retry < num_retries:
try:
self._ssh_client.connect(self.server.hostname,
username=self.uname,
pkey=self._pkey,
timeout=self._timeout)
return
except socket.error as xxx_todo_changeme:
(value, message) = xxx_todo_changeme.args
if value in (51, 61, 111):
print('SSH Connection refused, will retry in 5 seconds')
time.sleep(5)
retry += 1
else:
raise
except paramiko.BadHostKeyException:
print("%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname)
print('Edit that file to remove the entry and then hit return to try again')
raw_input('Hit Enter when ready')
retry += 1
except EOFError:
print('Unexpected Error from SSH Connection, retry in 5 seconds')
time.sleep(5)
retry += 1
print('Could not establish SSH connection')
def _connect(self,ip,port,user,sock=None):
sshClient = paramiko.SSHClient()
sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
tries = 0
sshtry = state.sshtry
sshTimeOut = state.sshTimeOut
while True:
try:
tries += 1
sshClient.connect(ip,int(port),user,timeout=sshTimeOut,sock=sock,key_filename=["/home/astd/.ssh/authorized_keys","/home/astd/.ssh/id_rsa"])
sshClient = sshClient
return sshClient
except paramiko.BadHostKeyException, e:
raise NetworkError("Host key for %s did not match pre-existing key! Server's key was changed recently, or possible man-in-the-middle attack." % ip, e)
except (
paramiko.AuthenticationException,
paramiko.PasswordRequiredException,
paramiko.SSHException
), e:
msg = str(e)
#if e.__class__ is paramiko.SSHException and msg == 'Error reading SSH protocol banner':
if e.__class__ is paramiko.SSHException and msg.startswith('Error reading SSH protocol banner'):
#print "WARNNING: reconnect ip:%s %s"%(self.ip,msg)
if tries < sshtry:
time.sleep(1)
continue
else:
raise Exception(e)
else:
raise Exception(e)
except Exception,e:
if str(e) == "timed out" and tries < sshtry:
#print "Warnning %s:%s,retries ..."%(ip,str(e))
time.sleep(1)
continue
raise e
def __init__(self,ip,port=22,user="astd"):
self.ip = ip
self.port = port
self.user = user
sshClient = paramiko.SSHClient()
sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
tries = 0
sshtry = state.sshtry
while True:
try:
tries += 1
sshClient.connect(ip,port,user,timeout=5,key_filename=["/home/astd/.ssh/authorized_keys","/home/astd/.ssh/id_rsa"])
self.sshClient = sshClient
self.transport = sshClient.get_transport()
break
except paramiko.BadHostKeyException, e:
raise NetworkError("Host key for %s did not match pre-existing key! Server's key was changed recently, or possible man-in-the-middle attack." % ip, e)
except (
paramiko.AuthenticationException,
paramiko.PasswordRequiredException,
paramiko.SSHException
), e:
msg = str(e)
if e.__class__ is paramiko.SSHException and msg == 'Error reading SSH protocol banner':
if tries < sshtry:
continue
else:
raise Exception(e)
else:
raise Exception(e)
except Exception,e:
raise Exception(e)
def connect(self):
sshClient = paramiko.SSHClient()
sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
tries = 0
sshtry = state.sshtry
while True:
try:
tries += 1
sshClient.connect(self.ip,self.port,self.user,timeout=15,key_filename=["/home/astd/.ssh/authorized_keys","/home/astd/.ssh/id_rsa"])
self.sshClient = sshClient
self.transport = sshClient.get_transport()
break
except paramiko.BadHostKeyException, e:
raise NetworkError("Host key for %s did not match pre-existing key! Server's key was changed recently, or possible man-in-the-middle attack." % ip, e)
except (
paramiko.AuthenticationException,
paramiko.PasswordRequiredException,
paramiko.SSHException
), e:
msg = str(e)
#if e.__class__ is paramiko.SSHException and msg == 'Error reading SSH protocol banner':
if e.__class__ is paramiko.SSHException and msg.startswith('Error reading SSH protocol banner'):
#print "WARNNING: ip:%s %s"%(self.ip,msg)
if tries < sshtry:
time.sleep(1)
continue
else:
raise Exception(e)
else:
raise Exception(e)
except Exception,e:
raise Exception(e)
def connect(self, num_retries=5):
"""
Connect to an SSH server and authenticate with it.
:type num_retries: int
:param num_retries: The maximum number of connection attempts.
"""
retry = 0
while retry < num_retries:
try:
self._ssh_client.connect(self.server.hostname,
username=self.uname,
pkey=self._pkey,
timeout=self._timeout)
return
except socket.error as xxx_todo_changeme:
(value, message) = xxx_todo_changeme.args
if value in (51, 61, 111):
print('SSH Connection refused, will retry in 5 seconds')
time.sleep(5)
retry += 1
else:
raise
except paramiko.BadHostKeyException:
print("%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname)
print('Edit that file to remove the entry and then hit return to try again')
raw_input('Hit Enter when ready')
retry += 1
except EOFError:
print('Unexpected Error from SSH Connection, retry in 5 seconds')
time.sleep(5)
retry += 1
print('Could not establish SSH connection')
def connect(self, num_retries=5):
"""
Connect to an SSH server and authenticate with it.
:type num_retries: int
:param num_retries: The maximum number of connection attempts.
"""
retry = 0
while retry < num_retries:
try:
self._ssh_client.connect(self.server.hostname,
username=self.uname,
pkey=self._pkey,
timeout=self._timeout)
return
except socket.error as xxx_todo_changeme:
(value, message) = xxx_todo_changeme.args
if value in (51, 61, 111):
print('SSH Connection refused, will retry in 5 seconds')
time.sleep(5)
retry += 1
else:
raise
except paramiko.BadHostKeyException:
print("%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname)
print('Edit that file to remove the entry and then hit return to try again')
raw_input('Hit Enter when ready')
retry += 1
except EOFError:
print('Unexpected Error from SSH Connection, retry in 5 seconds')
time.sleep(5)
retry += 1
print('Could not establish SSH connection')
def get_ssh_client(hostname, ssh_hostname):
"""Tries to create ssh client
Create ssh client based on the username and ssh key
"""
if not CREDS.SSH_KEYFILE:
logger.errorout("ssh_keyfile not set",
module=COMMAND_MODULE_CUSTOM)
retries = 0
while retries < MAX_SSH_RETRIES:
try:
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ssh_hostname,
username=CREDS.SSH_USER,
port=CREDS.SSH_PORT,
pkey=CREDS.PK,
timeout=CONNECTION_TIMEOUT)
return ssh
except paramiko.BadAuthenticationType:
logger.error("BadAuthenticationType",
hostname=hostname,
module=COMMAND_MODULE_CUSTOM)
return
except paramiko.AuthenticationException:
logger.error("Authentication failed",
hostname=hostname,
module=COMMAND_MODULE_CUSTOM)
return
except paramiko.BadHostKeyException:
logger.error("BadHostKeyException",
fix="Edit known_hosts file to remove the entry",
hostname=hostname,
module=COMMAND_MODULE_CUSTOM)
return
except paramiko.SSHException:
logger.error("SSHException",
hostname=hostname,
module=COMMAND_MODULE_CUSTOM)
return
except Exception as e:
if retries == 0:
logger.error("Problems connecting to host",
hostname=hostname,
module=COMMAND_MODULE_CUSTOM,
error=e.message)
retries += 1
time.sleep(1)
logger.error("Can not connect to host",
hostname=hostname,
module=COMMAND_MODULE_CUSTOM)
return None