Paramiko: открытие фонового процесса

#python #bash #ssh #paramiko #gnu-screen

#python #bash #ssh #paramiko #gnu-экран

Вопрос:

Я использую Paramiko для подключения по SSH к удаленному серверу, и я хотел бы отслеживать фоновый процесс, запущенный на этом сервере, с помощью screen.

Я успешно создал клиент и смог распечатать stdin / stdout / stderr, используя приведенный ниже код:

 import paramiko

cert = paramiko.RSAKey.from_private_key_file("key.pem")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect(hostname="hostname.compute.amazonaws.com", username="ubuntu", pkey=cert)
stdin, stdout, stderr = c.exec_command('ls')
  

Однако, когда я пытаюсь выполнить команду, которую я хочу запустить:

 stdin, stdout, stderr = c.exec_command('screen -d -r 23099')
  

Я получаю сообщение об ошибке: «Должен быть подключен к терминалу. r n’. Не могли бы вы объяснить, что я неправильно понимаю в Paramiko, и возможен ли мониторинг вывода на экран в режиме реального времени? Пользователь, с которым я общаюсь по SSH, — это тот же пользователь, которому принадлежит экран, так что это не должно быть проблемой.

Комментарии:

1. чтобы исправить ошибку, перейдите get_pty=True к exec_command() . но это не очень хорошая идея «контролировать» сеанс экрана с помощью paramiko.

2. каковы ваши реальные требования? можете ли вы просто ssh -t user@host screen ... ?

3. Спасибо за помощь! понятно — у меня есть сервер AWS с фоновыми процессами на 3 экранах, и я собираюсь создать инструмент для iOS (для личного использования), чтобы видеть состояние этих процессов и запускать общие команды с моего телефона.

4. Я посмотрел на флаг -t, и это звучит так, как будто я абсолютно должен был сделать ssh -t host screen -r PID , так что спасибо! Используя этот проект, чтобы узнать больше о bash, потоковой передаче http и т. Д. 🙂