Paramiko: вызов команды "cd" с помощью exec_command ничего не делает - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть следующая программа, использующая Paramiko:

#!/usr/bin/env python

import paramiko

hostname = '192.168.1.12'
port = 22
username = 'root'
password = 'whatl0ol'

if __name__ == "__main__":
    paramiko.util.log_to_file('paramiko.log')
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.connect(hostname, port, username, password)             

while True:
      pick = raw_input("sshpy: ")
      stdin, stdout, stderr = ssh.exec_command(pick)
      print stdout.readlines() 

Но когда я подключаюсь и пытаюсь использовать cd, она не работает.Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Paramiko SSH_Client открывает новый сеанс и выполняет команду в этом сеансе, и после выполнения команды канал сеанса закрывается.

Выполнение команды 'cd' было бы выполнено в первом сеансе и позже, для следующей команды сеанс снова начнется из домашнего каталога.

Если вы хотите сохранить сеанс,используйте invoke_shell для интерактивного сеанса.

0 голосов
/ 20 декабря 2018

Похоже, вы реализуете какую-то интерактивную программу, которая позволяет выполнять последовательность команд на сервере.

* SSHClient.exec_command выполняет каждую команду в отдельном «exec»канал.Отдельные команды работают в своей среде.Поэтому, если вы выполните команду cd, она никак не повлияет на последующих команд.Они снова начнутся в домашнем каталоге пользователя.

Если вы хотите реализовать сеанс интерактивной оболочки, используйте SSHClient.invoke_shell.
Например, см. , как взаимодействоватьс сеансом интерактивной оболочки Paramiko?

См. также Выполнить несколько команд в Paramiko, чтобы на команды влияли их предшественники .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...