Я начал использовать paramiko для вызова команд на моем сервере из скрипта python на моем компьютере.
Я написал следующий код:
from paramiko import client
class ssh:
client = None
def __init__(self, address, port, username="user", password="password"):
# Let the user know we're connecting to the server
print("Connecting to server.")
# Create a new SSH client
self.client = client.SSHClient()
# The following line is required if you want the script to be able to access a server that's not yet in the known_hosts file
self.client.set_missing_host_key_policy(client.AutoAddPolicy())
# Make the connection
self.client.connect(address, port, username=username, password=password, look_for_keys=False)
def sendcommand(self, command):
# Check if connection is made previously
if self.client is not None:
stdin, stdout, stderr = self.client.exec_command(command)
while not stdout.channel.exit_status_ready():
# Print stdout data when available
if stdout.channel.recv_ready():
# Retrieve the first 1024 bytes
_data = stdout.channel.recv(1024)
while stdout.channel.recv_ready():
# Retrieve the next 1024 bytes
_data += stdout.channel.recv(1024)
# Print as string with utf8 encoding
print(str(_data, "utf8"))
else:
print("Connection not opened.")
def closeconnection(self):
if self.client is not None:
self.client.close()
def main():
connection = ssh('10.40.2.222', 2022 , "user" , "password")
connection.sendcommand("cd /opt/process/bin/; ./process_cli; scm")
print("here")
#connection.sendcommand("yes")
#connection.sendcommand("nsgadmin")
#connection.sendcommand("ls")
connection.closeconnection()
if __name__ == '__main__':
main()
Теперь последняя команда в команде Iотправляю на мой сервер (scm) команду, которая должна быть отправлена процессу "process_cli", который я запускаю на сервере, и должна вывести мне выходные данные процесса (процесс получает входные данные от stdin оболочки сервераи выводит вывод на стандартный вывод оболочки сервера).
Когда я работаю в интерактивном режиме, все в порядке, но когда я запускаю сценарий, я получаю успех при подключении к своему серверу и выполнении всех основных команд оболочки на этом сервере (пример: ls, pwd и т. д.), но я не могу запустить какие-либо команды для процесса, который выполняется внутри этого сервера.
Как я могу исправить эту проблему?