在Django应用中无法通过SSH连接服务器
我正在写一个比较简单的应用程序,它通过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)
有没有人知道为什么会这样?有没有什么办法可以解决这个问题?
1 个回答
3
我猜你的Django应用可能是以一个和你在命令行下运行脚本时不同的用户身份在运行。另外,我还猜这可能是Django应用用户第一次尝试通过SSH连接到主机,所以它可能在等待一个问题,比如“是否可以更新~/.ssh/known_hosts”。
看起来如果你使用SSHClient而不是Transport,那么你可以设置缺失主机密钥的策略,让它自动添加缺失的主机密钥,像这样:
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)