无法在 Django 应用程序中通过 SSH 连接到服务器

发布于 2024-10-12 12:52:35 字数 484 浏览 7 评论 0原文

我正在编写相当简单的应用程序,它通过 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)

知道为什么它会这样吗?有什么办法可以解决吗?

I'm writing fairly simple application which connects to server through SSH (using paramiko), does something and writes output to web page. I wrote a script which works well when I run it from command line. However, if I run it in Django application, it can't get through connect part.

SSH connect part:

transport = paramiko.Transport((host, port))

# application cannot get through this line
transport.connect(username = '***', password = '***')

output = ...

View:

def ssh_output(request):
    return HttpResponse(output)

Any idea why does it behave like this? Is there any way to fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奈何桥上唱咆哮 2024-10-19 12:52:35

我猜测您的 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)

I'm guessing your Django app may be running under a different user than the user you're running your command line script under. Also, I'm guessing it might be the first time the Django app user is trying to ssh to the host, so it may be hanging on some sort of 'is it OK to update ~/.ssh/known_hosts' question.

It looks like if you use SSHClient instead of Transport, then you can set the missing host key policy to automatically add the missing host keys 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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文