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

问题描述 投票:0回答:3

我有以下使用 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
时,它不起作用。我该如何解决这个问题?

python ssh paramiko
3个回答
3
投票

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

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

如果要实现交互式 shell 会话,请使用

SSHClient.invoke_shell

有关示例,请参阅如何与 Paramiko 的交互式 shell 会话进行交互?

另请参阅 在 Paramiko 中执行多个命令,以便命令受到其前任命令的影响


0
投票

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

执行“cd”命令将在第一个会话中完成,稍后,对于下一个命令,会话将从主目录再次启动。

如果您想保持会话,请使用invoke_shell进行交互式会话。


0
投票

我需要更改目录并运行可执行文件。我必须用一个命令来完成这一切。客户端设备是一台 Windows 10 机器。 windows下的cmd shell太有问题了!命令不同。 ';'命令之间不起作用。您需要使用“&”。 cd d:/someDirectory 不起作用。你需要“/d”。 “密码”不起作用。此外, echo%cd% to pwd 不能可靠地工作。没有 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)
© www.soinside.com 2019 - 2024. All rights reserved.