1、之前jupyter lab的密码设置是,每次启动以后 都需要 设置,然后重新启动服务,管理起来很困难。所以想着如何在 docker run 的时候,就把 jupyter lab 的密码设置了。
想法就是,设置docker run --env 的环境变量,传递到容器内部,容器的启动脚本自动执行设置命令,设置密码,而脚本的书写是重点,现在开源如下,需要的伙伴可以自己拿。
docker run 需要设置环境变量 JUPYTER_PASSWORD 。。 。。 把如下的脚本写在startup.sh 中。 密码被写入 .jupyter/jupyter_lab_config.py 中。。。。。
import os
import fileinput
import hashlib
import random
from ipython_genutils.py3compat import cast_bytes, str_to_bytes
# Get the password from the environment
password_environment_variable = os.environ.get('JUPYTER_PASSWORD')
# Hash the password, this is taken from https://github.com/jupyter/notebook/blob/master/notebook/auth/security.py
salt_len = 12
algorithm = 'sha1'
h = hashlib.new(algorithm)
salt = ('%0' + str(salt_len) + 'x') % random.getrandbits(4 * salt_len)
h.update(cast_bytes(password_environment_variable, 'utf-8') + str_to_bytes(salt, 'ascii'))
password = ':'.join((algorithm, salt, h.hexdigest()))
# Store the password in the configuration
setup_line = "#c.NotebookApp.password = ''"
new_setup_line = setup_line.replace("''", "u'" + password + "'")
new_setup_line = new_setup_line.replace("#", "")
setup_file = os.getenv("HOME") + "/.jupyter/jupyter_lab_config.py"
# for line in fileinput.input(setup_file, inplace=True):
# line.replace(setup_line, new_setup_line)
# for line in fileinput.input(setup_file, inplace=True):
# line.replace("#c.NotebookApp.password_required = False", "c.NotebookApp.password_required = True")
fp =open(setup_file, "a+", encoding="u8")
fp.write("\n"+new_setup_line)
fp.close()
2、上文介绍了lab 的密码自动设置,现在同样开源 ssh 的密码设置,之前也搜了很多,但是大家都是介绍如何自动登陆ssh 的,而介绍如何自动设置密码却很少,而且问题也多,也是通过 docker run 的环境变量来设置,环境变量是SSH_PASSWD。
同样需要写到 startup.sh 文件中。
#!/usr/local/bin/expect
set timeout 20
set user root
set new $env(SSH_PASSWD)
set ip localhost
spawn -noecho "passwd"
expect "输入新的 UNIX 密码:*"
send "$new\n"
expect "重新输入新的 UNIX 密码:*"
send "$new\n"