PermissionError:[Errno 13]访问aws ec2时拒绝权限

时间:2018-11-01 07:56:36

标签: python amazon-web-services ubuntu amazon-ec2 jupyter-notebook

我在虚拟机上运行ubuntu 16.04(在Mac上),并在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 /

然后是$ jupyter笔记本,然后复制令牌链接并与dns结合使用,但仍然没有用。

4 个答案:

答案 0 :(得分:1)

您设置的端口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创建于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

答案 1 :(得分:1)

我遇到了同样的问题,现在我通过尝试几件事解决了。尝试以下解决方案,看看是否有帮助:

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

   sudo chown -R $USER ~/.local/share/jupyter/
  1. 如果遇到ssl错误问题,请查看此link

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

  3. 如果您的Chrome浏览器出现Your connection is not private问题,并且无法继续操作,请尝试使用Safari或其他浏览器。这种情况发生在Chrome版本70或更高版本中。
  4. 尝试使用Leon Huang的解决方案为您的实例打开端口8888。

答案 2 :(得分: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

答案 3 :(得分:0)

对我有用的是:

  1. 使用 sudo chown -R $USER ~/.local/share/jupyter/
  2. 按照上面的答案更改所有权
  3. 为所选的 Jupyter 端口打开 EC2 入口端口。
  4. 除了创建证书文件外,还可以创建密钥,如示例 here 中所示。我之前只添加了证书,但它触发了 SSL 错误。