instalar - paramiko python ssh example
¿Cómo cambio directorios utilizando Paramiko? (4)
Drush comandos que no se ejecutan utilizando Paramiko
Publiqué la pregunta anterior con respecto a un mensaje de error persistente que recibo usando Paramiko. No creo que esté relacionado con mi próxima pregunta, pero podría estarlo.
Puedo conectarme exitosamente a mi servidor a través de SSH usando Paramiko. Puedo ejecutar comandos como ls o pwd. Lo que aparentemente no puedo hacer es cambiar directorios. Puedo enviar el comando "cd .." por ejemplo, pero cuando sigo con "pwd" se muestra que no he cambiado los directorios. Solo enumera el directorio inicial en el que estoy cuando inicio sesión.
>>> stdin, stdout, stderr = myssh.exec_command("pwd")
>>> stdout.readlines()
[''/big/dom/home/myid/n'']
>>> stdin, stdout, stderr = myssh.exec_command("cd ../")
>>> stdout.readlines()
[]
>>> stdin, stdout, stderr = myssh.exec_command("pwd")
>>> stdout.readlines()
[''/big/dom/home/myid/n'']
>>>
¿Estoy entendiendo mal lo que está pasando aquí? ¿No debería ser capaz de cambiar directorios? O si puedo, ¿debería hacerlo de otra manera que no sea usar exec_command?
-
No puedo responder mi propia pregunta por otras 7 horas, así que aquí está la respuesta:
Este tipo lo había descubierto: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/
Solo tiene que enviar varios comandos con un exec_command, como:
myssh.exec_command (''cd ..; pwd'')
Luego stdout.readlines () devolverá el directorio al que usted cambió.
A partir de la versión 2.1+, el método para cambiar directorios es sftp.chdir(''path/to/directory'')
Bueno, paramiko crea una instancia de shell y todos los comandos que desea ejecutar en paramiko tienen que darse en esa instancia de shell solamente.
Por ejemplo: Digamos que tengo una carpeta en el directorio en el que estoy.
folder1
folder2
folder3
Ahora, si quiero grabar en la carpeta 1 y hacer un directorio, lo que haría es:
ssh.exec_command(''cd folder1;mkdir folder4'')
si lo escribe como:
ssh.exec_command(''cd folder1'')
ssh.exec_command(''mkdir folder4'')
obtendrías el resultado como
folder1
folder2
folder3
folder4
ya que eran dos instancias diferentes del shell y serían independientes en su función.
Este tipo lo tenía resuelto: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/
Solo tiene que enviar varios comandos con un exec_command, como por ejemplo:
myssh.exec_command(''cd ..; pwd'')
Luego stdout.readlines () devolverá el directorio al que usted cambió.
Un poco tarde con esto, pero es posible ''invocar'' y escribir en la entrada estándar a través de un archivo.
Consulte: https://.com/a/6203877/1861353
Parece un poco pesado, ya que puede '';'' ''unirse (cmdlist) y enviarlo a exec_command.