AWS-LightSail Ubuntu启动脚本(建立新账户,密码登录,免密sudo)

因为课程项目的原因,需要配置若干个LightSail实例环境。一种比较方便的方式是在启动实例时执行一段脚本。操作系统为Ubuntu。
环境需求有以下几个:建立ubuntu之外的账户;除了公钥之外,可以使用密码SSH登录;可以进行免密码sudo。三个Linux经典操作。

建立新账户

1
2
# Add user. -m create home. -s set shell
sudo useradd newuser -m -s /bin/bash

其中newuser为用户名,-m选项创建/home下的newuser文件夹,-s指定登录Shell。
下面为新账户设定密码:

1
2
# set password
echo 'newuser:123456' | sudo chpasswd

一般设置密码的方式是passwd命令,然而这种方式必须是交互式的,不适用于脚本中。使用chpasswd可以将账户密码以标准输入的形式输入,格式为“账户:密码”。其缺点是需要在命令里显式写下密码,如果想要保密可以将密码先存在文件里,然后catchpasswd的标准输入中。在实例启动阶段,就echo好了。

允许SSH密码登录

1
2
3
# enable password authentication for ssh
sudo sed -i '52c PasswordAuthentication yes' /etc/ssh/sshd_config
sudo service sshd restart

本质是编辑/etc/ssh/sshd_config文件,这里简便起见用sed命令写死。-i指in place,否则sed会把结果print出来,52是行号,c表示替换。随后重启SSHD服务。

允许新账户免密sudo

1
2
# password-free sudo for newuser
sudo sed -i '20a newuser ALL=(ALL:ALL) NOPASSWD:ALL' /etc/sudoers

sudo权限设置文件位于/etc/sudoers,这里也是用sed写死,a表示添加。