jupyter-notebook - Jupyterhub 在登录时创建用户和主页
问题描述
我已经设置了一个带有 LDAP 身份验证的 jupyterhub 服务器。服务器和身份验证工作正常。但我的问题是,我需要在服务器上手动创建我想登录的用户,否则他没有家,我得到这个错误。
[I 2018-10-18 09:01:56.869 JupyterHub base:499] User logged in: t1
[I 2018-10-18 09:01:56.871 JupyterHub log:158] 302 POST /hub/login?next= -> /user/t1/ (t1@::ffff:192.168.3.47) 296.81ms
[I 2018-10-18 09:01:56.882 JupyterHub log:158] 302 GET /user/t1/ -> /hub/user/t1/ (@::ffff:192.168.3.47) 1.30ms
[E 2018-10-18 09:01:56.938 JupyterHub user:477] Unhandled error starting t1's server: 'getpwnam(): name not found: t1'
[E 2018-10-18 09:01:56.957 JupyterHub web:1670] Uncaught exception GET /hub/user/t1/ (::ffff:192.168.3.47)
HTTPServerRequest(protocol='http', host='192.168.3.41:8000', method='GET', uri='/hub/user/t1/', version='HTTP/1.1', remote_ip='::ffff:192.168.3.47')
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/tornado/web.py", line 1592, in _execute
result = yield result
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/handlers/base.py", line 1052, in get
await self.spawn_single_user(user)
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/handlers/base.py", line 705, in spawn_single_user
timedelta(seconds=self.slow_spawn_timeout), finish_spawn_future
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/handlers/base.py", line 626, in finish_user_spawn
await spawn_future
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/user.py", line 489, in spawn
raise e
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/user.py", line 409, in spawn
url = await gen.with_timeout(timedelta(seconds=spawner.start_timeout), f)
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/spawner.py", line 1090, in start
env = self.get_env()
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/spawner.py", line 1083, in get_env
env = self.user_env(env)
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/spawner.py", line 1070, in user_env
home = pwd.getpwnam(self.user.name).pw_dir
KeyError: 'getpwnam(): name not found: t1'
[E 2018-10-18 09:01:56.973 JupyterHub log:150] {
"X-Forwarded-Host": "192.168.3.41:8000",
"X-Forwarded-Proto": "http",
"X-Forwarded-Port": "8000",
"X-Forwarded-For": "::ffff:192.168.3.47",
"Cookie": "jupyterhub-hub-login=\"2|1:0|10:1539846116|20:jupyterhub-hub-login|44:NTc5OTcxZmQyNGU4NDA5NTk2MDQ1ZDU2MTNjYmI0YWQ=|a8fc650edf529f207cbf9516a0d710abcce7f123599701e4733f463773828e59\"; _xsrf=2|483ee87a|5bb8426d0014f212a146a53135b9aba9|1538554955; jupyterhub-session-id=90e264b21f9b4993ba65735c9e390adb",
"Accept-Language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://192.168.3.41:8000/hub/login",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
"Upgrade-Insecure-Requests": "1",
"Cache-Control": "max-age=0",
"Connection": "close",
"Host": "192.168.3.41:8000"
}
[E 2018-10-18 09:01:56.975 JupyterHub log:158] 500 GET /hub/user/t1/ (t1@::ffff:192.168.3.47) 82.51ms
如果凭据正确,有没有办法创建用户和家庭。谢谢
编辑:现在我将 jupyterhub-ldap-authenticator 更新到版本 0.3.0。那里直接支持自动主目录创建器。
我在 jupyterhub_config.py 文件中的 LDAP 部分的当前配置如下所示:
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator'
c.LDAPAuthenticator.server_hosts = ['ldap://ldap.example.com:389']
c.LDAPAuthenticator.bind_user_dn = 'uid=binduser,cn=users,dc=ldap,dc=example,dc=com'
c.LDAPAuthenticator.bind_user_password = 'Password'
c.LDAPAuthenticator.user_search_base = 'cn=users,dc=ldap,dc=example,dc=com'
c.LDAPAuthenticator.user_search_filter = '(&(objectClass=posixAccount)(uid={username}))'
c.LDAPAuthenticator.username_pattern = '[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?'
c.LDAPAuthenticator.create_user_home_dir = True
c.LDAPAuthenticator.create_user_home_dir_cmd = ['mkhomedir_helper']
但我现在有问题,我收到以下错误。
500 : Internal Server Error
这是日志的输出。
[I 2018-11-13 10:40:03.183 JupyterHub log:158] 302 GET /hub/ -> /hub/login (@::ffff:192.168.3.47) 1.19ms
[I 2018-11-13 10:40:03.245 JupyterHub log:158] 200 GET /hub/login (@::ffff:192.168.3.47) 47.94ms
[I 2018-11-13 10:40:11.116 JupyterHub ldapauthenticator:586] User 't1' sucessfully authenticated against ldap server ['ldap://ldap.example.com:389'].
[I 2018-11-13 10:40:11.128 JupyterHub ldapauthenticator:290] Creating 't1' user home directory using command 'mkhomedir_helper t1'
[E 2018-11-13 10:40:11.133 JupyterHub web:1670] Uncaught exception POST /hub/login?next= (::ffff:192.168.3.47)
HTTPServerRequest(protocol='http', host='192.168.3.49:8000', method='POST', uri='/hub/login?next=', version='HTTP/1.1', remote_ip='::ffff:192.168.3.47')
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/tornado/web.py", line 1592, in _execute
result = yield result
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/handlers/login.py", line 81, in post
user = await self.login_user(data)
File "/usr/local/lib/python3.6/dist-packages/jupyterhub/handlers/base.py", line 483, in login_user
await maybe_future(self.authenticator.add_user(user))
File "/usr/local/lib/python3.6/dist-packages/ldapauthenticator/ldapauthenticator.py", line 269, in add_user
yield gen.maybe_future(self.add_user_home_dir(username))
File "/usr/local/lib/python3.6/dist-packages/ldapauthenticator/ldapauthenticator.py", line 295, in add_user_home_dir
raise RuntimeError("Failed to create system user %s: %s" % (username, err))
RuntimeError: Failed to create system user t1:
[E 2018-11-13 10:40:11.146 JupyterHub log:150] {
"X-Forwarded-Host": "192.168.3.49:8000",
"X-Forwarded-Proto": "http",
"X-Forwarded-Port": "8000",
"X-Forwarded-For": "::ffff:192.168.3.47",
"Accept-Language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://192.168.3.49:8000/hub/login",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
"Upgrade-Insecure-Requests": "1",
"Origin": "http://192.168.3.49:8000",
"Cache-Control": "max-age=0",
"Content-Length": "29",
"Connection": "close",
"Host": "192.168.3.49:8000"
}
[E 2018-11-13 10:40:11.147 JupyterHub log:158] 500 POST /hub/login?next= (@::ffff:192.168.3.47) 603.82ms
谢谢你的帮助。
解决方案
找到了解决我的问题的方法。
首先,我安装了 jupyterhub LDAP 身份验证器。
pip3 install jupyterhub-ldapauthenticator
安装后,我编辑了配置文件。
nano /etc/jupyterhub/jupyterhub_config.py
配置如下所示:
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator'
c.LDAPAuthenticator.server_hosts = ['ldap://ldap.example.com:389']
c.LDAPAuthenticator.bind_user_dn = 'uid=ldapbind,cn=users,dc=ldap,dc=example,dc=com‘
c.LDAPAuthenticator.bind_user_password = ‘Password’
c.LDAPAuthenticator.user_search_base = 'cn=users,dc=ldap,dc=example,dc=com‘
c.LDAPAuthenticator.user_search_filter = '(&(objectClass=posixAccount)(uid={username}))'
c.LDAPAuthenticator.username_pattern = '[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?'
c.LDAPAuthenticator.create_user_home_dir = True
c.LDAPAuthenticator.create_user_home_dir_cmd = ['mkhomedir_helper']
在下一步中,我安装了以下 LDAP 包。
sudo apt-get install libnss-ldap libpam-ldap nscd
在安装过程中,您可以对配置进行必要的更改。安装后,我需要重新配置包,因为我需要更改密码加密。
sudo dpkg-reconfigure ldap-auth-config
接下来,我更改了配置文件 ldap.conf。
nano /etc/ldap/ldap.conf
从:
#BASE dc=unixmen,dc=local
#URI ldap://192.168.1.100
到:
BASE dc=ldap,dc=example,dc=com
URI ldap://ldap.example.com
我编辑的第二个配置文件是 nsswitch.conf。ldap 需要添加四次。
passwd: compat ldap
group: compat ldap
shadow: compat ldap
netgroup: ldap
更改后,需要重新启动服务。
systemctl restart nscd
像这样,我可以解决我的问题,它仍然为我工作。
推荐阅读
- sql - 带有允许空字段的 WHERE 条件的 SQL 查询
- java - 无法创建具有所需功能的新远程会话
- php - eloquent 中的参数号无效
- wpf - WPF。在运行时访问绑定集合
- angular - 角度日历未在角度 5 中导出成员“DateAdapter”
- sql - “是”“否”“其他”的 SSRS 程序流程
- amazon-ec2 - 如何防止 TeamCity 启动 AWS 云代理实例
- matlab - 在不使用循环的情况下查找数据集中的奇点
- java - 尝试访问 Java ArrayList 时出现 NullPointer
那不是空的 - javascript - 在字符串 Angular 的一部分上应用粗体文本