我正在编写相当简单的应用程序,它通过SSH连接到服务器(使用paramiko
),执行某些操作并将输出写入网页。我写了一个脚本,当我从命令行运行它时效果很好。但是,如果我在Django应用程序中运行它,则无法通过connect
部分。
SSH连接部分:
transport = paramiko.Transport((host, port))
# application cannot get through this line
transport.connect(username = '***', password = '***')
output = ...
查看:
def ssh_output(request):
return HttpResponse(output)
知道为什么会这样吗?有没有办法解决它?
答案 0 :(得分:3)
我猜你的Django应用程序可能运行的用户不同于你运行命令行脚本的用户。另外,我猜这可能是Django应用程序用户第一次尝试ssh到主机,因此它可能会挂起某种“可以更新〜/ .ssh / known_hosts”的问题。
如果您使用SSHClient而不是Transport,那么您可以设置缺少的主机密钥策略以自动添加缺少的主机密钥ala
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(your_host, port=your_port, username=your_username, password=your_password)