paramiko.ssh_exception.BadAuthenticationType throwing Authentication error and SFTP pull is also failing
I am receiving the error- "ERROR_SFTP_PULL, AUTHENTICATION ERROR Server connection dropped": -Normal passwordless sftp (get) is working to the remote server from my local server, however SFTP PULL is failing through Python script. It was running normal 4 days ago. Surprisingly, file copied from remote server to local server with same size. However, because of error exception script is doing sys exit. Please guide to resolve the issue. Also it takes less than 1 sec to copy the file , however taking 15 minutes to copy and error out.
It looks bad at below code part:
1. authReturnCode = "<class 'paramiko.ssh_exception.BadAuthenticationType'>", not sure please help
2. errorKey = "INFO_SFTP_PULL, "+ eachFiles + " successfully copyied from SFX for " + custName
Failure log:
===========
2021-04-26 15:00:02,459 INFO::ipndProxyApp.py:787: Processing data for: eDCP
2021-04-26 15:00:02,851 INFO::transport.py:1746: Connected (version 2.0, client SSHD)
2021-04-26 15:00:03,860 INFO::transport.py:1746: Authentication (publickey) successful!
2021-04-26 15:00:03,922 INFO::sftp.py:158: [chan 0] Opened sftp connection (server version 3)
2021-04-26 15:15:15,376 INFO::sftp.py:158: [chan 0] sftp session closed.
2021-04-26 15:15:15,491 ERROR::ipndProxyApp.py:119: ERROR_SFTP_PULL, AUTHENTICATION ERROR Server connection dropped:
Normal log is:
=============
2021-04-22 15:00:02,138 INFO::ipndProxyApp.py:782: Processing data for: eDCP
2021-04-22 15:00:02,256 INFO::transport.py:1746: Connected (version 2.0, client SSHD)
2021-04-22 15:00:02,563 INFO::transport.py:1746: Authentication (publickey) successful!
2021-04-22 15:00:02,586 INFO::sftp.py:158: [chan 0] Opened sftp connection (server version 3)
2021-04-22 15:00:09,999 INFO::sftp.py:158: [chan 0] sftp session closed.
2021-04-22 15:00:10,003 INFO::ipndProxyApp.py:122: INFO_SFTP_PULL, FILE_2021-04-21-18-00-35.txt successfully copied from SFX for eDCP
Python Code:
===========
import os, sys, logging, shutil
import pysftp, mysql.connector
import subprocess, csv, argparse
from datetime import datetime, timedelta
import time
# Importing Configuration settings or other supporting scripts
import settings
import SQLqueries
import fieldLengthVerification
# Static Configuration settings, logging settings, global variables
logging.basicConfig(filename='/var/log/ipnd.log', format='%(asctime)s %(levelname)s::%(filename)s:%(lineno)d: %(message)s', dateformat='%Y-%m-%d %I:%M:%S',level=logging.INFO)
currentDateTime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
currentDate = datetime.now().strftime("%Y-%m-%d")
yesterdays_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
twoDaysBack = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
# Handling Authentication errors for the SFT authentications only
def errorHandling(errorFromProgram):
"""
Function to handle authentication error for sftp only, it accepts exception errors and return string keyword.
Parameters:
errorFromProgram (class) : Error class generated by Exceptions
Returns:
str: str(errorFromProgram) or "Authentication Success" or "AUTHENTICATION ERROR " + str(errorFromProgram)
"""
# This function to perform error handling and return string against the provided input
authReturnCode = "<class 'paramiko.ssh_exception.BadAuthenticationType'>"
# Handling RHEL version of sftp (<class 'paramiko.ssh_exception.AuthenticationException'>)
if str(errorFromProgram) == "Authentication failed.":
errorKeyWord = str(errorFromProgram)
return errorKeyWord
# Handling SUSE version of sftp (<class 'paramiko.ssh_exception.BadAuthenticationType'>)
elif str(type(errorFromProgram)) == authReturnCode:
errorExcetption,a = errorFromProgram
errorKeyWord = errorExcetption
return errorKeyWord
# Handling other situation then provious two
elif (str(errorFromProgram) != "Authentication failed.") or (str(type(errorFromProgram)) != authReturnCode):
errorKeyWord = "AUTHENTICATION ERROR " + str(errorFromProgram)
return errorKeyWord
# Handling other conditions if not handled in provious if and elif
else:
infoKeyWord = "Authentication Success"
return infoKeyWord
# Fetch eDCP Data files from SFX sftp server
def fetchFilesFromSftpLocation(custName, fileSrcHost, remoteFileLocation, fileSrcUser, fileSrcPassPhrase, dateToProcessFiles):
"""
Function to fetch files from remove servers and store in location directory, return nothing and accept following parameters
Parameters:
custName (str): Customer Name.
fileSrcHost (str): Hostname (FQDN) or IP address of the source server from where files would be fetched.
fileLocation (str): Remote file location.
fileSrcUser (str): User to connect remote server to fetch files.
fileSrcPassPhrase (str): Password to connect remote server to fetch files.
dateToProcessFiles (str): Date to fetch the files for
"""
# try to connect SFX server over sftp
try:
sftp = pysftp.Connection(fileSrcHost, username = fileSrcUser)
# change to remote directory
sftp.chdir(remoteFileLocation)
listOfFilesAtSFX = sftp.listdir()
for eachFiles in listOfFilesAtSFX:
if eachFiles.startswith("IPNDUP" + custName.upper() +"_" + dateToProcessFiles):
# Fetch files from SFTP
try:
sftp.get(eachFiles)
**errorKey = "INFO_SFTP_PULL, "+ eachFiles + " successfully copyied from SFX for " + custName**
except Exception as e:
errorKey = "ERROR_SFTP_PULL, "+ errorHandling(e)
#print(errorKey)
sftp.close()
# Capture Exception
except Exception as e:
errorKey = errorHandling(e)
errorKey = "ERROR_SFTP_PULL, "+ errorKey
# Checking conditions to generate ERROR or INFO
if len(errorKey) > 0:
listOfErrorKeys = errorKey.split('_')
if "ERROR" in listOfErrorKeys:
logging.error("%s" % errorKey)
sys.exit(1)
else:
logging.info("%s" % errorKey)
else:
logging.error("%s" % "No Error keywords found")
from Recent Questions - Stack Overflow https://ift.tt/3sVMVJp
https://ift.tt/eA8V8J
Comments
Post a Comment