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