Я не начинающий программист, но я в основном использую C, а не Python.Я пытаюсь написать скрипт Python, используя Paramiko для доступа к SSH-серверу.
Соединение нормально, но я не могу понять, как ждать возвращаемые данные.
После подписанияна SSH-сервер он запускает приложение на консоли, которое затем требует входа.
Как мне дождаться, пока приложение завершит вывод, а затем отправить требуемый вход и пароль?
Я знаю другие библиотеки, такие как Fabric, но я не могу найти способ сделать это и для них.
import sys
from paramiko import client
class ssh:
client = None
def __init__(self, address, username, password):
print("Connecting to server.")
self.client = client.SSHClient()
self.client.set_missing_host_key_policy(client.AutoAddPolicy())
self.client.connect(address, username=username, password=password, look_for_keys=False)
def sendCommand(self, command):
# Check if connection is made previously.
if(self.client):
stdin, stdout, stderr = self.client.exec_command(command)
while not stdout.channel.exit_status_ready():
# Print data when available.
if stdout.channel.recv_ready():
# Retrieve the first 1024 bytes.
alldata = stdout.channel.recv(1024)
prevdata = b"1"
while prevdata:
# Retrieve the next 1024 bytes.
prevdata = stdout.channel.recv(1024)
alldata += prevdata
print(str(alldata, "utf8"))
else:
print("Connection not opened.")
def main ():
connection = ssh("SOME_IP", "USERNAME", "PASSWORD")
connection.sendCommand("ls") # This works fine
# (on a system with no application running after login)
# so I know all is good
# The problem is that after login an application is run automatically
# that displays an input screen and waits for a different login and password.
# I cant find a way to detect this screen has finished loading before I send login details.
# I cant use "sendCommand" as the application runs straight after login,
# there is no command to send.
# The actual end goal is to scrape the output from the application
# after logging in and selecting a few options.
if __name__ == '__main__':
sys.exit(main())