def exec_command(self, command, bufsize=-1): #print “Executing Command: “+command chan = self._transport.open_session() chan.exec_command(command) stdin = chan.makefile(‘wb’, bufsize) stdout = chan.makefile(‘rb’, bufsize) stderr = chan.makefile_stderr(‘rb’, bufsize) return stdin, stdout, stderr
在paramiko中执行命令时,在运行exec_command时它总是会重置会话。我希望能够执行sudo或su并在运行另一个exec_command时仍然具有那些特权。另一个示例是尝试exec_command(“ cd /”),然后再次运行exec_command并将其放在根目录中。我知道您可以执行类似exec_command(“ cd /; ls -l”)的操作,但是我需要在单独的函数调用中执行此操作。
非交互式用例
这是一个 非交互式 示例……它发送cd tmp,ls然后发送exit。
cd tmp
ls
exit
import sys sys.stderr = open('/dev/null') # Silence silly warnings from paramiko import paramiko as pm sys.stderr = sys.__stderr__ import os class AllowAllKeys(pm.MissingHostKeyPolicy): def missing_host_key(self, client, hostname, key): return HOST = '127.0.0.1' USER = '' PASSWORD = '' client = pm.SSHClient() client.load_system_host_keys() client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts')) client.set_missing_host_key_policy(AllowAllKeys()) client.connect(HOST, username=USER, password=PASSWORD) channel = client.invoke_shell() stdin = channel.makefile('wb') stdout = channel.makefile('rb') stdin.write(''' cd tmp ls exit ''') print stdout.read() stdout.close() stdin.close() client.close()
交互式用例 如果您有交互式用例,那么此答案将无济于事…我个人将使用pexpect或exscript用于交互式会话。
pexpect
exscript