【问题标题】:Telethon TelegramClient authentication in Docker containerDocker 容器中的 Telethon TelegramClient 身份验证
【发布时间】:2023-03-27 10:41:02
【问题描述】:

我们有一个 script 用于从 Telegram 频道下载文件,使用 PythonTelethon 库。

要创建一个Telethon 实例,我们使用TelegramClient 构造函数。此方法要求用户将他的 Telegram 号码插入控制台,然后 Telegram 发送一个安全号码,该号码应写回控制台。

这个身份验证保存在Object/File/DB中,名为session,所以在下一次执行中,TelegramClient将不再询问电话号码。

现在,我想为脚本创建一个 Docker 镜像,这意味着当用户从发布的镜像创建一个容器时,他必须进行身份验证过程,这就是问题:

我们必须通过哪些方式尽可能自动地执行此身份验证?

我们可以使用 Docker 技巧、Telegram/Telethon 技巧,也许还有 Python 技巧……

【问题讨论】:

  • 您的会话存储在 sqlite 数据库中。如果您将其作为容器的一部分,则无需再次进行身份验证。唯一的问题是您不能在多个不同的 IP 上运行会话。这意味着使用您容器的人将需要以交互模式 (-it) gist.github.com/mitchwongho/11266726 使用它来提供凭据
  • 我认为这就是我在回答中所写的。但在我的回答中,我也尝试为 docker compose 和多实例解决这个问题,这就是我建议卷的原因。

标签: docker docker-compose telegram two-factor-authentication telethon


【解决方案1】:

您可以使用 StringSession 保存和获取 Telethon 客户端的访问权限。 只需将会话生成为简单字符串并将其保存在 docker secret 中。 https://docs.telethon.dev/en/latest/concepts/sessions.html#string-sessions

【讨论】:

    【解决方案2】:

    我会尝试提出一种解决方案。

    我们可以将session保存在主机文件系统中,并将session的位置设置为docker容器的volume

    然后我们可以在容器外创建一个用于验证和创建此会话的脚本,当容器启动时,它已经有一个session

    【讨论】:

    • 这确实是要走的路。我通过资源here 提供了更完整的答案
    • 我刚刚意识到,我的回答只是你的一个更详细的版本。
    【解决方案3】:

    您可以通过为您的会话文件和任何配置数据创建一个bind-mount 来做到这一点——我建议使用类似python-dotenv 的东西。您可以在 Dockerfile 以及 Docker Compose 中进行设置。请参阅 here 获取 Dockerfile 和 here 获取 Docker Compose。

    只需确保为容器中的会话文件设置合理的路径即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      相关资源
      最近更新 更多