OBS1:这个问题重复了here正如韦恩在评论中所建议的那样,但仍然没有答案。
我有一台运行 ubuntu 的远程机器,我在其中配置 jupyterhub 笔记本服务器。服务器已经启动并运行,但是,我注意到它只适用于以前通过 ssh 登录机器的用户。
对于以前从未通过 ssh 登录过机器的用户,服务器会生成一个登录屏幕,但登录后会出现以下图像:
它之前显示了不同的目录路径(我的意思是与/user/john.snow 不同),但我将 jupyterhub spawner 类配置为通过添加以下行来创建目录:
if os.path.exists('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'])!=True:
os.system('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'])
(如果有用,我会在问题末尾附加完整的生成器代码)由于我不打算测试 jupyter notebook 查找的每个目录,因此我希望在计算机中找到 ssh 配置文件,并使用 spawner 模拟 ssh 为特定用户所做的事情。
可能吗?我尝试查看/etc/ssh/ssh_config 和类似内容,但几乎所有文件都被注释并且语法很神秘。
感谢您的任何建议。
OBS:完整的生成器代码:
import os, getpass
import yaml
from jupyterhub.spawner import Spawner, LocalProcessSpawner
class spawner(LocalProcessSpawner):
def start(self):
# get environment variables,
# several of which are required for configuring the single-user server
env = self.get_env()
ret = super(spawner, self).start()
if os.path.exists('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'])!=True:
os.system('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'])
os.system('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'] + '/notebooks')
os.system('cp -r /usr/local/scripts/notebooks/* /home/FOLDER/' + env['JUPYTERHUB_USER'] + '/notebooks/')
os.system('chmod -R 777 /home/FOLDER/' + env['JUPYTERHUB_USER'] + '/notebooks/')
return ret
最佳答案
我找到了解决问题的方法。由于 spawner 代码试图将 ssh 创建的文件夹访问到机器中,因此这些行
if os.path.exists('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'])!=True:
os.system('mkdir /home/FOLDER/' + env['JUPYTERHUB_USER'])
如果此文件夹不存在,则尝试创建它。但是,ssh 生成了其他一些神秘的配置,我无法复制。相反,我发现 ssh 配置文件位于/etc/skel,所以我从 spawner 中删除了这两行,而是添加了:os.system('su ' + env['JUPYTERHUB_USER'])
os.system('source /etc/skel/.bashrc')
os.system('source /etc/skel/.profile')
os.system('exit')
'su env["JUPYTERHUB_USER"]' 和 'exit' 行在那里,因为生成器似乎以 root 身份执行。它解决了新用户,但已经产生红条的老用户仍在处理它。似乎在机器中删除他们的主文件夹解决了这个问题。
关于python - 使用 jupyter notebook spawn 复制 ssh 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72126652/