Python 请求 'Permission denied' 但与 sudo 一起使用

标签 python linux ubuntu ssl python-requests

我正在使用 Python Requests 库连接到 REST 服务器,方法是使用 .pem 证书来验证我是谁来建立连接,这样我就可以开始收集数据、解析数据等。当我通过 Eclipse 或终端,我收到此错误:

[('system library', 'fopen', 'Permission denied'), ('BIO routines', 'FILE_CTRL', 'system lib'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'system lib')]

但是,如果我以“sudo”运行 - 请求库按预期工作并且我能够检索数据。不幸的是,以“sudo”运行有副作用,默认的 Python 解释器是根解释器,即 Python2。但是,Anaconda 需要很多库依赖项。

对于上下文,这是我用来建立连接的函数:

PEM_FILE = os.path.expanduser("path/to/pem/file.pem")   #Path is to a folder in root level
    def set_up_connection(self):

    #URL's to request a connection with
    rest_auth = 'https://www.restwebsite.com/get/data'

    ip_address = self.get_ip_address()

    body = json.dumps({'userid':'user', 'password':'pass', 'ip_address':ip_address})

    try:
        resp = self.session.post(rest_auth, data=body, cert=PEM_FILE, verify=False)
        values = resp.json()
        token = values['token']

    except Exception as e:
        print(e)
        token = None

    return token, ip_address

TLDR;使用“python rest_connector.py”会出现错误。以 sudo 的方式运行该命令。

证书的上下文:.pem 证书权限设置为 600 (rw------)。

为了尝试解决以 sudo 身份运行的问题,我启动了一个终端并运行“sudo -Es”,它将终端设置为以 root 身份运行并使用 Anaconda 作为我的默认解释器,但我最终遇到了握手错误:

[('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca'), ('SSL routines', 'ssl3_read_bytes', 'ssl handshake failure')]

如果有人能帮我解决这个问题,那将是一个很好的临时修复,但我仍然需要能够在没有 sudo 的情况下运行它。

提前致谢。

最佳答案

用户名需要能够读取文件。您可以通过运行 ls path_to_file.pem 进行验证。

如果您更改了文件的所有权,您可能仍然缺少对包含该文件的目录的可执行权限。

您可以使用 chmod -R +x ~/path/to_directory_containing_perm 修复此问题

关于Python 请求 'Permission denied' 但与 sudo 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063859/

相关文章:

python - 编写 Boto3 过滤器以使用自定义标签名称的正确方法是什么?

python - 使用 QT 设计器创建的 PyQt5 程序从终端打开时不显示任何窗口

python - 确认 TF2 在训练时使用我的 GPU

linux - 如何知道ubuntu中默认的音频设备是/dev/audio还是/dev/dsp?

javascript - NodeJS - 逐行读取函数 + While 循环

python - 自定义上下文处理器在 Django 1.8.2 中不起作用

linux - Head 和 Basename 一起给出由信号 13 终止

android - Android和Ubuntu之间的蓝牙串行连接

ubuntu - 为 gedit 配置 clojure 语法高亮

PHP "AT command"未在 nginx ubuntu 16.04 上执行