Paramiko:使用exec_command调用“ cd”命令不会执行任何操作

时间:2018-12-19 21:29:29

标签: python ssh paramiko

我使用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时,它不起作用。我该如何解决?

3 个答案:

答案 0 :(得分:1)

您似乎正在实现某种交互式程序,该程序允许在服务器上执行一系列命令。

SSHClient.exec_command在单独的“ exec”通道中执行每个命令。各个命令在各自的环境中运行。因此,如果执行cd命令,则对后续命令完全没有作用。它们将再次从用户的主目录开始。

如果要实现交互式Shell会话。使用SSHClient.invoke_shell
有关示例,请参见how to interact with Paramiko's interactive shell session?

另请参阅Execute multiple commands in Paramiko so that commands are affected by their predecessors

答案 1 :(得分:0)

Paramiko SSH_Client打开一个新会话并在该会话中执行命令,一旦命令执行完成,会话通道将关闭。

将在第一个会话中执行“ cd”命令,然后再执行,对于下一个命令,该会话将从主目录重新开始。

如果要举行会话,请使用invoke_shell进行交互式会话。

答案 2 :(得分:0)

我需要更改目录并运行可执行文件。我必须在一个命令中完成所有这些操作。客户端单元是Windows 10计算机。 Windows中的cmd shell太有问题了!命令是不同的。 ';'命令之间不起作用。您需要使用“&”。 cd d:/ someDirectory不起作用。您需要'/ d'。 'pwd'不起作用。另外,对pwd的echo%cd%也不可靠。不带pwd参数的'cd'确实可以正常工作。我希望没有工作的清单可以节省您的时间。这是它降落的地方。

cmd = 'cd /d D:\someDirectory & SomeExecutable.exe 
      someParameter'
ssh_stdin, ssh_stdout, ssh_stderr = 
ssh.exec_command(cmd_1_to_execute)

要检查目录更改,请使用以下命令:

cmd = 'cd /d D:\someDirectory & cd'
ssh_stdin, ssh_stdout, ssh_stderr = 
ssh.exec_command(cmd_1_to_execute)

output = ssh_stdout.readline()
error = ssh_stderr.readline()
print("output: " + output)
print("error: " + error)