python shell ssh paramiko

python - Ejecute mĂșltiples comandos en Paramiko para que los comandos se vean afectados por sus predecesores.



shell ssh (2)

Bueno, al intentar accidentalmente algo, me las arreglé para resolver esto, creo. Debe ejecutar todos los comandos al mismo tiempo y no es necesario que los ejecute en un bucle. para mi caso sería

import paramiko hostname = '''' port = 22 username = '''' password = '''' #selecting PROD instance, changing to data directory, checking directory command = ''ORACLE_SID=PROD;cd /01/application/dataload;pwd'' ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname,port,username,password) stdin,stdout,stderr=ssh.exec_command(value) outlines=stdout.readlines() result=''''.join(outlines) print (result) ssh.close()

Estoy tratando lentamente de hacer un script de Python para SSH y luego FTP para hacer algún archivo manual que tengo que hacer todo el tiempo. Estoy usando Paramiko y la sesión parece ordenar, e imprime el directorio pero mi comando de cambio de directorio no parece funcionar, imprime el directorio en el que comienzo

/ 01 / inicio /

import paramiko hostname = '''' port = 22 username = '''' password = '''' #selecting PROD instance, changing to data directory, checking directory command = { 1:''ORACLE_SID=PROD'',2:''cd /01/application/dataload'',3:''pwd'' } ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname,port,username,password) for key,value in command.items(): stdin,stdout,stderr=ssh.exec_command(value) outlines=stdout.readlines() result=''''.join(outlines) print (result) ssh.close()


Cuando ejecuta exec_command varias veces, cada comando se ejecuta en su propio "shell". Por lo tanto, los comandos anteriores no tienen efecto en un entorno de los siguientes comandos.

Si necesita que los comandos anteriores afecten a los siguientes comandos, simplemente use una sintaxis adecuada del shell de su servidor. La mayoría de los shells * nix usan un punto y coma o un doble ampersand (con semántica diferente) para especificar una lista de comandos. En su caso, el ampersand es más apropiado, ya que ejecuta los siguientes comandos, solo si los comandos anteriores tienen éxito:

stdin,stdout,stderr=ssh.exec_command("ORACLE_SID=PROD && cd /01/application/dataload && pwd")