У меня есть стороннее приложение (работает на собственной сборке Linux). Я могу управлять приложением через ssh-клиент. Для выполнения команд мне нужно запустить rooth (это необходимо и не может быть обойдено). Поэтому мой обычный рабочий процесс выглядит следующим образом:
- Подключение через шпатлевку
- запустить "sudo rooth", ввести пароль
- выполнить команды, которые я хочу
Теперь я пытаюсь автоматизировать некоторые процессы и включить некоторые команды в мое приложение. Стороннее приложение не имеет API, так что это мой единственный способ общения с ним.
Я могу подключиться через python-paramiko без проблем. Но когда я запускаю команду после sudo rooth, она выполняется не внутри roothell, а в моей «базовой» оболочке, которая не может управлять приложением.
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=hostIP,username=user,password=passwd)
stdin,stdout,stderr = ssh_client.exec_command('cd')
stdin,stdout,stderr = ssh_client.exec_command('ls')
print(stdout.readlines())
stdin,stdout,stderr = ssh_client.exec_command('sudo rootsh')
stdin.write(superSecretPassword + '\n')
stdin,stdout,stderr = ssh_client.exec_command('cd')
stdin,stdout,stderr = ssh_client.exec_command('ls')
print(stdout.readlines())
оба отпечатка показывают одинаковый результат. При вводе одних и тех же команд в моей оболочке замазки я получаю разные результаты, так как после 'sudo rooth' 'cd' перенаправляет меня в корневой каталог, но без него нет.
Из моего понимания и тестирования корневая оболочка - это еще один сеанс в моей оболочке, поэтому моя программа не перенаправляет stdin и stdout на корневую оболочку.
Есть ли способ перенаправить мои входы и выходы в корневую оболочку или каким-либо другим способом, с помощью которого я мог бы войти в корневую оболочку через pyton?