#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 и т. Д. 🙂