Некоторые дополнительные подробности о том, как реализовать интерактивную аутентификацию с помощью клавиатуры.
Я думал, что у меня это работает в первый раз, но мой сервер отправляет два интерактивных запроса.Первый запрос содержит приглашение = [('Password: ', False)]
.
Второй содержит пустое приглашение = []
Код ниже работает с каждым сервером, который я тестировал (Redhat, Ubuntu, OpenSUSE)
from twisted.conch.ssh import keys, userauth</p>
<pre><code>class ClientUserAuth(userauth.SSHUserAuthClient):
def getPassword(self, prompt = None):
#normal password authentication
print "PASSWORD AUTH"
return defer.succeed('*****') # <-- YOUR PASSWORD
def getGenericAnswers(self, name, instruction, prompts):
#interactive password authentication
print "INTERACTIVE AUTH"
response = ['']*len(prompts)
for i, p in enumerate(prompts):
try:
if('password' in p[0].lower()):
response[i] = '*****' # <-- YOUR PASSWORD
except:
pass
#The response is always a sequence, and the length of it is always
#identical to the length of prompts
return defer.succeed(response)
Включение входа в Twisted также помогло отладить то, что Конч делал под капотом.
from twisted.python import log
log.msg('Started Logging for A Conch Program')
log.startLogging(sys.stdout)