我在bash脚本中遇到了以下代码,用于自动部署和设置Jupyter Notebook。密码包含#
时会出现问题,因为该行的其余部分被视为注释(并且可能由于缺少右括号而在Python中引发异常):
# Set up Jupyter Notebook with the same password
su - $USERNAME -c "$SHELL +x" << EOF
mkdir -p ~/.jupyter
python3 -c "from notebook.auth.security import set_password; set_password(password=\"$PASSWORD\")"
EOF
显然,由于上述问题,这不是理想的密码设置方法。
我想知道在这种情况下会有什么最佳实践吗?使用三引号代替单引号可能会更好,但是如果提供的密码具有三引号,仍然会遇到问题。通常如何解决这种情况?
答案 0 :(得分:0)
您可以像在docker上所做的那样将Jupyter命令行选项enter link description here传递到笔记本。该方法已保存,因为它将使用此方法。 start-notebook.sh脚本如下所示:source。
#!/bin/bash
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
set -e
wrapper=""
if [[ "${RESTARTABLE}" == "yes" ]]; then
wrapper="run-one-constantly"
fi
if [[ ! -z "${JUPYTERHUB_API_TOKEN}" ]]; then
# launched by JupyterHub, use single-user entrypoint
exec /usr/local/bin/start-singleuser.sh "$@"
elif [[ ! -z "${JUPYTER_ENABLE_LAB}" ]]; then
. /usr/local/bin/start.sh $wrapper jupyter lab "$@"
else
. /usr/local/bin/start.sh $wrapper jupyter notebook "$@"
fi
例如,要使用通过使用IPython.lib.passwd()哈希的自定义密码而不是默认令牌来保护Notebook服务器,您可以运行以下命令通过docker进行测试:
#generate a password
from IPython.lib.security import passwd
passwd(passphrase=None, algorithm='sha1')
# run test in docker
docker run -d -p 8888:8888 jupyter/base-notebook start-notebook.sh --notebookApp.password='sha1:31246c00022b:cd4a5e1eac6b621284331642a27b621948d80a92'