PermissionError: [Errno 13] Permission denied 在访问AWS EC2时出现权限被拒绝的错误。

4
我在Mac上运行虚拟机Ubuntu 16.04,以及在云服务器aws ec2上运行Ubuntu 18.04。我试图在aws.ec2上运行Jupiter笔记本,并尝试通过本地Ubuntu的Web浏览器远程访问它。我可以访问远程Ubuntu(aws.ec2)终端。在按照此 link 的步骤后,我在第9步遇到了以下错误。我已经从头开始重新安装了3次所有内容(包括本地Ubuntu和aws ec2实例),但到目前为止没有任何进展。
Last login: Thu Nov  1 06:34:07 2018 from 134.1****
ubuntu@ip-172-***:~$ export XDG_RUNTIME_DIR=""
ubuntu@ip-172-***:~$ jupyter notebook
[I 06:40:19.525 NotebookApp] Serving notebooks from local directory: /home/ubuntu
[I 06:40:19.528 NotebookApp] The Jupyter Notebook is running at:
[I 06:40:19.528 NotebookApp] https:// **** :8888/?token=727fbb120d19f55a435c1*****
[I 06:40:19.528 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 06:40:19.529 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        https://(ip-172-31-***** .0.1):8888/?token=727fbb120d19f55a435c14*********
ERROR:asyncio:Exception in callback BaseAsyncIOLoop._handle_events(4, 1)
handle: <Handle BaseAsyncIOLoop._handle_events(4, 1)>
Traceback (most recent call last):
  File "/usr/lib/python3.6/asyncio/events.py", line 145, in _run
    self._callback(*self._args)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/platform/asyncio.py", line 122, in _handle_events
    handler_func(fileobj, events)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/stack_context.py", line 300, in null_wrapper
    return fn(*args, **kwargs)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/netutil.py", line 262, in accept_handler
    callback(connection, address)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/tcpserver.py", line 263, in _handle_connection
    do_handshake_on_connect=False)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/netutil.py", line 565, in ssl_wrap_socket
    context = ssl_options_to_context(ssl_options)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/netutil.py", line 540, in ssl_options_to_context
    context.load_cert_chain(ssl_options['certfile'], ssl_options.get('keyfile', None))
PermissionError: [Errno 13] Permission denied
ERROR:asyncio:Exception in callback BaseAsyncIOLoop._handle_events(4, 1)
handle: <Handle BaseAsyncIOLoop._handle_events(4, 1)>
Traceback (most recent call last):
  File "/usr/lib/python3.6/asyncio/events.py", line 145, in _run
    self._callback(*self._args)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/platform/asyncio.py", line 122, in _handle_events
    handler_func(fileobj, events)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/stack_context.py", line 300, in null_wrapper
    return fn(*args, **kwargs)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/netutil.py", line 262, in accept_handler
    callback(connection, address)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/tcpserver.py", line 263, in _handle_connection
    do_handshake_on_connect=False)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/netutil.py", line 565, in ssl_wrap_socket
    context = ssl_options_to_context(ssl_options)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/tornado/netutil.py", line 540, in ssl_options_to_context
    context.load_cert_chain(ssl_options['certfile'], ssl_options.get('keyfile', None))
PermissionError: [Errno 13] Permission denied

注意1:在EC2实例上,Ubuntu有18.04版本,它自带Python 3.6.3,然后我不得不在其上安装Anaconda,现在Python版本是3.5.2,一旦我键入$python3。

注意2:尽管已将Anaconda安装到EC2中,但Python版本仍降级为3.5.2。

我检查了以下目录/usr/local/lib/,只有python3.6文件夹存在,然后我键入$sudo chmod 777 dist-packages/

然后$sjupyter notebook,复制令牌链接并与DNS组合,但仍未工作。

4个回答

10

我曾经也遇到同样的问题,现在我通过尝试一些方法解决了它。请尝试这些解决方案,看看是否有帮助:

  1. /home 文件夹和 ~/.local/share/jupyter/ 文件夹的所有权更改为当前运行此命令的用户:
   sudo chown -R $USER /home/

   sudo chown -R $USER ~/.local/share/jupyter/
  1. 如果你遇到SSL错误问题,请查看这个链接

  2. 确保在浏览器中输入https://<jupyter-server-ip>而不是http://

  3. 如果你在Chrome浏览器中遇到了“您的连接不是私密连接”的问题并且无法继续,请尝试使用Safari或其他浏览器。 这种情况发生在Chrome 70或更高版本中。
  4. 尝试Leon Huang的解决方案,以打开实例的8888端口。

1
这个做得很好。我见过很多人遇到这个问题。所有提出的解决方案都不起作用,但你的起作用了。谢谢你。 - user2331566
我有同样的问题,尝试了你的第一步,它起作用了,然后到了第二步,现在我遇到了SSL错误。ssl.SSLError: [SSL: EE_KEY_TOO_SMALL] ee key too small (_ssl.c:4022)。看起来我的错误与其他人的不太相似。我也尝试了降低SSL级别,但不起作用。有什么建议吗? - yts61
我在这里提出了一个问题:https://dev59.com/ZcDqa4cB1Zd3GeqPnODA - yts61
太好了!我也遇到了同样的问题,使用第一个命令后,一切都正常工作了。感谢novus提供的帮助,也感谢hkacmaz提出的问题。 - alejomarchan

2
你设置的端口8888必须包含在安全组入站规则中。这个问题已经在本论坛由Benai解决:https://forums.fast.ai/t/can-t-connect-to-jupyter-notebook-tried-3-different-machines-err-connection-timed-out/3779 以下是逐步说明:
  1. 在左侧面板中点击“实例”(在“实例”下方)。
  2. 选择您的实例(“名称”和“实例ID”的左侧方框应变为蓝色,并且页面下部将显示一组信息。此信息将包括标签,如“描述”,“状态检查”,“监视”和“标记”)。
  3. 如果单击“描述”,则应显示信息。在“安全组”旁边,我看到以下以蓝色显示:“launch-wizard-10. 查看入站规则”。
  4. 单击“查看入站规则”,然后会看到一个小窗口弹出,其中给出: 端口 协议 来源 Launch-wizard-10 22 tcp 0.0.0.0/0 这表示仅对入站信息开放了22号端口。
  5. 接下来,在左侧面板中单击“安全组”(在“网络和安全”下)。 通过查看“描述”,我确定了列表中哪个安全组适用于我的运行实例,以查看今天的日期(例如,“launch-wizard-10 created 2017-06-29”)。
  6. 在左侧的复选框中选择该项目(该框变为蓝色)。 页面下部出现信息,包括标签“描述”,“入站”,“出站”和“标记”。 单击“入站”标签。
  7. 在我的情况下,我只看到:“SSH TCP 22 0.0.0.0/0” 单击“编辑”。 单击“添加规则”,然后会出现一行新行。 在“端口范围”下输入“8888”,并在“来源”下选择“任何地方”,这将更改值为“0.0.0.0/0,::/0”。 单击“保存”。
  8. 现在,您应该在页面下部看到以下内容: 自定义TCP规则TCP 8888 0.0.0.0/0

0

对我而言有效的方法是:

  1. 按照上述答案更改所有权,使用sudo chown -R $USER ~/.local/share/jupyter/
  2. 为所选择的Jupyter端口打开EC2入站端口。
  3. 除创建证书文件外,还要创建密钥,就像此处的示例一样。我之前只添加了证书,结果触发了SSL错误。

0

我一直面临着这个问题,就像所述的那样,我找到了解决方法。

您需要检查您的证书文件,并检查它是否归根所有。

您只需要将所有权更改为正在使用凭据的jupyter用户,笔记本电脑就可以正常工作。

从...更改

(base) santoshshds@dsserver:~/certs$ ls -lrth
total 4.0K
-rw------- 1 root root 2.0K May  5 10:02 mycert.pem

(base) santoshshds@dsserver:~/certs$ ls -lrth
total 4.0K
-rw------- 1 santoshshds root 2.0K May  5 10:02 mycert.pem

现在Jupyter运行良好

####################################################################
[I 06:58:40.180 NotebookApp] https://(dsserver or 127.0.0.1):8888/

[I 06:58:40.180 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

[W 06:58:45.487 NotebookApp] error on read: [SSL: SSLV3_ALERT_BAD_CERTIFICATE] sslv3 alert bad certificate (_ssl.c:2488)

[W 06:58:45.499 NotebookApp] error on read: [SSL: SSLV3_ALERT_BAD_CERTIFICATE] sslv3 alert bad certificate (_ssl.c:2488)

[W 06:58:45.750 NotebookApp] error on read: [SSL: SSLV3_ALERT_BAD_CERTIFICATE] sslv3 alert bad certificate (_ssl.c:2488)

[I 06:58:54.468 NotebookApp] 302 GET / (x.x.x.x) 0.63ms

[I 06:58:54.785 NotebookApp] 302 GET /tree? (x.x.x.x) 0.81ms

[W 07:14:58.719 NotebookApp] Not allowing login redirect to '/tree?'

[I 07:14:58.720 NotebookApp] 302 POST /login?next=%2Ftree%3F (x.x.x.x) 1.62ms

[I 07:14:59.047 NotebookApp] 302 GET / (x.x.x.x) 0.65ms

其中 (x.x.x.x) 是浏览器的 IP 地址


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接