def _get_sftp_client(self):
""" returns a sftp client object and the corresponding transport socket.
Both must be closed after use.
"""
transport = paramiko.Transport((self.servername, 22))
# transport.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# If no password is supplied, try to look for a private key
if self.password is "" or None:
rsa_keypath = os.path.expanduser(self.rsakey_local_path)
if not os.path.isfile(rsa_keypath):
# login with provided username + empty password
try:
transport.connect(username=self.username, password="")
except Exception:
logger.error("Cannot connect to " + self.servername)
logger.error("Check username, password or key in " + self.rsakey_local_path)
raise
else:
# login with provided username + private key
rsa_key = paramiko.RSAKey.from_private_key_file(rsa_keypath)
try:
transport.connect(username=self.username, pkey=rsa_key)
except Exception:
logger.error("Cannot connect to " + self.servername)
logger.error("Check username and your key in " + self.rsakey_local_path)
raise
else:
# login with provided username + password
transport.connect(username=self.username, password=self.password)
sftp = paramiko.SFTPClient.from_transport(transport)
return sftp, transport
评论列表
文章目录