Python CGI与paramiko

我正在尝试编写一个
Python CGI脚本,用户可以在其中输入Name(主机名)和从表单中选择内存,然后通过使用paramiko模块,它将执行free -m命令到给定节点

import cgi
import paramiko

 print "Content-type:text/html\r\n\r\n"
 print '<html>'
 print '<head><title>My First CGI Program</title></head>'
 print '<body>'
 print '<h1>Hello Program!</h1>'
 form = cgi.FieldStorage()
 if form.getvalue("name"):
 name = form.getvalue("name")
 if form.getvalue("memory"):
 ssh = paramiko.SSHClient()
 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 ssh.connect(name, username='testuser', password='test12')
    stdin, stdout, stderr=ssh.exec_command("free -m")

 for line in stdout.readlines():
        print line.strip()
 ssh.close()

print '<form method="post" action="final.py">'
print '<p>Name: <input type="text" name="name"/></p>'
print '<input type="checkbox" name="memory" /> Memory'
print '<input type="submit" value="Submit" />'
print '</form>'
print '</body>'
print '</html>'

这不是抛出错误,但同时它没有给出任何输出,不确定我做错了什么

最佳答案

form = cgi.FieldStorage()
hostname = form.getvalue("name") or None
if hostname and form.getvalue("memory"):
   ssh = paramiko.SSHClient()

   #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
   #This, of course, is not in the interest of the inventor and is infinitely unsafe,
   #so should only be used in tests in secure networks.
   #The correct way is to have Paramiko load the host keys,
   #so that it can check them as intended like:

   client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
   client.connect(hostname, username="testuser")
   stdin, stdout, stderr = client.exec_command('free -m')
   #for test print all std's
   for line in stdin, stdout, stderr:
       print line.strip('\n')
   client.close()
点赞