本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 PAM 身份验证
在 JupyterHub on Amazon EMR 中创建 PAM 用户是一个两步过程。第一步是,将用户添加到在主节点上的 jupyterhub
容器中运行的操作系统,以及为每个用户添加一个相应的用户主目录。第二步是,将这些操作系统用户添加为 JupyterHub 用户 — 称为 whitelisting (在 JupyterHub 中)。添加 JupyterHub 用户之后,这些用户可连接到 JupyterHub URL 并提供其操作系统凭证以便访问。
用户登录后,JupyterHub 将为用户打开保存在主节点上用户主目录 中的笔记本服务器实例。/var/lib/jupyter/home/
. 如果笔记本服务器实例不存在,则 JupyterHub 将在用户的主目录中生成一个笔记本实例。以下部分演示如何将用户分别添加到操作系统和 JupyterHub,后接用于添加多个用户的基本清除脚本。
username
将操作系统用户添加到容器
以下示例首先在容器内使用 useradd
sudo docker exec jupyterhub useradd -m -s /bin/bash -N diego sudo docker exec jupyterhub bash -c "echo diego:diego | chpasswd"
添加 JupyterHub 用户
您可以使用 JupyterHub 中的 Admin (管理员) 面板或 REST API 添加用户和管理员,或仅添加用户。
使用 JupyterHub 中的“Admin (管理员)”面板添加用户和管理员
-
使用 SSH 连接到主节点并登录 https://
MasterNodeDNS
:9443,具有具有管理员权限的身份。 -
选择 Control Panel (控制面板)、Admin (管理员).
-
选择 User (用户)、Add Users (添加用户),或选择 Admin (管理员)、Add Admins (添加管理员).
使用 REST API 添加用户
-
使用 SSH 连接到主节点并在主节点上使用以下命令,或将此命令作为步骤运行。
-
获取管理令牌以发出 API 请求并替换
AdminToken
(在以下步骤中使用该令牌)。 -
使用以下命令,将
UserName
替换为已在容器内创建的操作系统用户。curl -XPOST -H "Authorization: token
AdminToken
" "https:$(hostname):9443/hub/api/users/UserName
示例:用于添加多个用户的清除脚本
以下示例清除脚本将与此部分中的前述步骤配合使用,以创建多个 JupyterHub 用户。此脚本可以直接在主节点上运行,也可上传到 Amazon S3 并在之后作为步骤运行。
此脚本先建立一组用户名,并使用 jupyterhub token
命令为默认管理员 jovyan 创建一个 API 令牌。然后,它在 jupyterhub
容器中为每个用户创建一个操作系统用户,以为每个用户分配一个与其用户名相同的初始密码。最后,它调用 REST API 操作以在 JupyterHub 中创建每个用户。它在脚本中传递之前生成的令牌并将
REST 响应传输到 jq
以方便查看。
# Bulk add users to container and JupyterHub with temp password of username set -x USERS=(shirley diego ana richard li john mary anaya) TOKEN=$(sudo docker exec jupyterhub /opt/conda/bin/jupyterhub token jovyan | tail -1) for i in "${USERS[@]}"; do sudo docker exec jupyterhub useradd -m -s /bin/bash -N $i sudo docker exec jupyterhub bash -c "echo $i:$i | chpasswd" curl -XPOST --silent -k https://$(hostname):9443/hub/api/users/$i \ -H "Authorization: token $TOKEN" | jq done
将此脚本保存到 Amazon S3 中的位置(如 s3://mybucket/createjupyterusers.sh
. 然后,可以使用 script-runner.jar
将此脚本作为步骤运行。
示例:创建集群时运行脚本 (AWS CLI)
包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。
aws emr create-cluster --name="
MyJupyterHubCluster
" --release-label emr-5.32.0 \ --applications Name=JupyterHub --log-uris3://MyBucket/MyJupyterClusterLogs
\ --use-default-roles --instance-type m5.xlarge --instance-count2
--ec2-attributes KeyName=MyKeyPair
\ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region
.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/createjupyterusers.sh"]
在现有集群上运行脚本 (AWS CLI)
包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。
aws emr add-steps --cluster-id
j-XXXXXXXX
--steps Type=CUSTOM_JAR,\ Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region
.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/createjupyterusers.sh"]