简介
当您第一次创建新的Ubuntu 18.04服务器时,作为基本设置的一部分,您应该在早期执行几个配置步骤。这将提高服务器的安全性和可用性,并为后续操作奠定坚实的基础。
虽然您可以完成这些步骤manually,,但有时编写流程脚本会更容易,从而节省时间并消除人为错误。本指南介绍如何使用脚本自动执行初始服务器设置guide.中的步骤
脚本是做什么的?
此脚本是手动运行Ubuntu18.04初始服务器设置guide和在Ubuntu 18.04.上设置SSH密钥》指南中概述的过程的替代方法
以下变量会影响脚本的运行方式:
USERNAME
:要创建并授予sudo
权限的普通用户帐号的名称。COPY_AUTHORIZED_KEYS_FROM_ROOT
:是否将SSH密钥资产从 根账户复制到新的sudo
账户。Other_PUBLIC_KEYS_TO_ADD
:字符串数组,表示要添加到sudo
账号的其他公钥。这可以选择性地作为从 根** 帐户复制密钥的补充或替代。
在运行脚本之前,您应该根据需要更新这些变量。
当脚本运行时,将执行以下操作:
- 使用
USERNAME
变量指定的名称创建具有sudo
权限的普通用户帐号。 - 配置新帐号的初始密码状态:
-如果服务器配置为密码身份验证,则会将原始生成的管理密码从根 帐户移到新的
sudo
帐户。然后锁定** 超级用户** 帐户的密码。 -如果服务器配置为SSH密钥身份验证,则sudo
账户设置为空密码。 sudo
用户的密码被标记为过期,必须在首次登录时更改。- 如果
COPY_AUTHORIZED_KEYS_FROM_ROOT
设置为true
,则会将 根** 账号中的Authorated_keys
文件复制给sudo
用户。 Other_PUBLIC_KEYS_TO_ADD
中定义的所有密钥都会添加到sudo
用户的授权_密钥
文件中。 超级用户 关闭了基于密码的SSH认证。- 启用UFW防火墙并允许SSH连接。
如何使用脚本
该脚本可以通过两种方式运行:在creation](https://andsky.com/tech/tutorials/an-introduction-to-droplet-metadata# about-user-data)过程中将其添加到[服务器的用户数据字段],或者以超级用户身份 登录并在配置后执行它。
使用用户数据
在DigitalOcean上创建Drop时,您可以选择指定User data,a脚本在初始服务器配置期间运行以执行其他配置。
如果要从控制面板 创建快捷批处理,可以在** 选择其他选项** 部分选中** 用户数据** 复选框。将出现一个文本框,您可以在其中粘贴脚本:
如果您正在使用**DigitalOcean数据创建水滴,则可以使用API** ](https://developers.digitalocean.com/documentation/v2/# create-a-new-droplet),_data
属性传入脚本。
如果您正在[使用**doctl
命令行数据创建Drop],可以使用--tool** ](https://github.com/digitalocean/doctl),-data-file
选项传入脚本:
1[environment local]
2doctl compute droplet create ... --user-data-file /path/to/script
无论您使用哪种方法添加用户数据,该脚本都将在新服务器第一次启动时运行。您可能需要等待几分钟才能完成该过程,但之后,您可以使用启用了sudo
的用户登录到您的服务器以进行任何进一步配置。
首次登录时,系统将提示您更改密码。一旦您提供并确认您的新凭据,服务器将终止当前的SSH会话。然后,您可以像往常一样再次通过SSH登录。
置备后运行脚本
如果您不想使用用户数据,也可以在服务器启动后通过SSH手动运行该脚本。
如果您已将脚本下载到本地计算机,则可以通过键入以下命令将脚本直接传递给SSH:
1[environment local]
2ssh root@servers_public_IP "bash -s" -- < /path/to/script/file
您现在应该能够使用您的sudo
帐户登录以进行任何进一步配置。
如果您尚未将脚本下载到本地计算机,请首先登录到服务器上的根 帐户:
1[environment local]
2ssh root@servers_public_IP
接下来,将原始脚本下载到服务器:
1curl -L https://raw.githubusercontent.com/do-community/automated-setups/master/Ubuntu-18.04/initial_server_setup.sh -o /tmp/initial_setup.sh
检查脚本以确保其下载正确,并更新您希望更改的任何变量:
1nano /tmp/initial_setup.sh
一旦满意,使用bash
手动运行脚本:
1bash /tmp/initial_setup.sh
您应该能够使用启用了sudo
的用户登录来完成任何进一步的配置。
脚本内容
您可以在DigitalOcean社区GitHub组织的Automated-Setup repository]中找到初始服务器设置脚本。要直接复制或下载脚本内容,请单击脚本顶部的原始 按钮,或单击此处查看原始内容directly.
为方便起见,此处还包括了完整的内容:
1#!/bin/bash
2set -euo pipefail
3
4########################
5### SCRIPT VARIABLES ###
6########################
7
8# Name of the user to create and grant sudo privileges
9USERNAME=sammy
10
11# Whether to copy over the root user's `authorized_keys` file to the new sudo
12# user.
13COPY_AUTHORIZED_KEYS_FROM_ROOT=true
14
15# Additional public keys to add to the new sudo user
16# OTHER_PUBLIC_KEYS_TO_ADD=(
17# "ssh-rsa AAAAB..."
18# "ssh-rsa AAAAB..."
19# )
20OTHER_PUBLIC_KEYS_TO_ADD=(
21)
22
23####################
24### SCRIPT LOGIC ###
25####################
26
27# Add sudo user and grant privileges
28useradd --create-home --shell "/bin/bash" --groups sudo "${USERNAME}"
29
30# Check whether the root account has a real password set
31encrypted_root_pw="$(grep root /etc/shadow | cut --delimiter=: --fields=2)"
32
33if [ "${encrypted_root_pw}" != "*" ]; then
34 # Transfer auto-generated root password to user if present
35 # and lock the root account to password-based access
36 echo "${USERNAME}:${encrypted_root_pw}" | chpasswd --encrypted
37 passwd --lock root
38else
39 # Delete invalid password for user if using keys so that a new password
40 # can be set without providing a previous value
41 passwd --delete "${USERNAME}"
42fi
43
44# Expire the sudo user's password immediately to force a change
45chage --lastday 0 "${USERNAME}"
46
47# Create SSH directory for sudo user
48home_directory="$(eval echo ~${USERNAME})"
49mkdir --parents "${home_directory}/.ssh"
50
51# Copy `authorized_keys` file from root if requested
52if [ "${COPY_AUTHORIZED_KEYS_FROM_ROOT}" = true ]; then
53 cp /root/.ssh/authorized_keys "${home_directory}/.ssh"
54fi
55
56# Add additional provided public keys
57for pub_key in "${OTHER_PUBLIC_KEYS_TO_ADD[@]}"; do
58 echo "${pub_key}" >> "${home_directory}/.ssh/authorized_keys"
59done
60
61# Adjust SSH configuration ownership and permissions
62chmod 0700 "${home_directory}/.ssh"
63chmod 0600 "${home_directory}/.ssh/authorized_keys"
64chown --recursive "${USERNAME}":"${USERNAME}" "${home_directory}/.ssh"
65
66# Disable root SSH login with password
67sed --in-place 's/^PermitRootLogin.*/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config
68if sshd -t -q; then
69 systemctl restart sshd
70fi
71
72# Add exception for SSH and then enable UFW firewall
73ufw allow OpenSSH
74ufw --force enable
结论
自动化初始服务器设置可以节省您的时间,并为进一步的配置奠定良好的基础。如果您要执行其他步骤,您可以在脚本运行后登录以手动继续,或者将这些步骤附加到脚本的末尾以自动执行该过程。