У меня есть интересная проблема - мне нужно подключиться к серверу FTP / SFTP с кодом Python3
, но пароль содержит символ \n
внутри.Когда я вставляю пароль в клиент FTP / SFTP, он работает.Но если я использую pysftp
или ftplib
, аутентификация не пройдена.Конечно, я могу использовать pexpect
для эмуляции всех вещей в среде bash, но, может быть, есть способ сделать это в более питоническом стиле?
Я использую Ubuntu 18.10
, ftp v. 0.17-34
, pysftp 0.2.9
или paramiko 2.4.2
.
Это то, что я пытаюсь сделать
import paramiko
transport = paramiko.Transport('servername', 22)
password = "why\ninside"
username = anyuser
transport.connect(username=username, password=password)
Это то, что я получаю
---------------------------------------------------------------------------
AuthenticationException Traceback (most recent call last)
<ipython-input-7-2bf86c34be75> in <module>()
----> 1 transport.connect(username=username, password=password)
/home/vasily/.local/lib/python3.6/site-packages/paramiko/transport.py in connect(self, hostkey, username, password, pkey, gss_host, gss_auth, gss_kex, gss_deleg_creds, gss_trust_dns)
1261 else:
1262 self._log(DEBUG, "Attempting password auth...")
-> 1263 self.auth_password(username, password)
1264
1265 return
/home/vasily/.local/lib/python3.6/site-packages/paramiko/transport.py in auth_password(self, username, password, event, fallback)
1434 return []
1435 try:
-> 1436 return self.auth_handler.wait_for_response(my_event)
1437 except BadAuthenticationType as e:
1438 # if password auth isn't allowed, but keyboard-interactive *is*,
/home/vasily/.local/lib/python3.6/site-packages/paramiko/auth_handler.py in wait_for_response(self, event)
248 if issubclass(e.__class__, PartialAuthentication):
249 return e.allowed_types
--> 250 raise e
251 return []
252
AuthenticationException: Authentication failed.
Но если я использую pexpect
и отправьте этот пароль в FTP или SFTP, он идет.