用例
在UNIX服务器上,当手动登录时,会打开自己的命令外壳以运行命令。
我试图通过使用paramiko来自动执行此操作,但是,以某种方式,我无法使用paramiko在命令外壳上执行命令
我做了什么?
我创建了一个可以建立连接的简单脚本,但是由于输出始终为空,因此无法在Vshell上执行命令。
import paramiko
import sys
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=sys.argv[1],port=sys.argv[2],username=sys.argv[3],password=sys.argv[4])
command="show hwid"
stdin,stdout,stderr=ssh_client.exec_command(command)
out=stdout.read()
print out
err=stderr.read()
print err
ssh_client.close()
同一脚本在未使用 vshell 的服务器上使用时,可以很好地运行
对此有任何帮助或建议吗?
答案 0 :(得分:1)
stdin,stdout,stderr=ssh_client.exec_command(command)
关于这一行代码,我怀疑SSH服务器未正确配置为允许以这种方式执行命令(这等效于ssh myserver show hwid
,而不是在登录后将其键入到终端中)
您可能想模仿登录服务器后键入命令的行为,为此,我认为这是适当的:
shell = ssh_client.invoke_shell()
stdin, stdout, stderr = shell.exec_command(command)