使用 Ubuntu 18.04 自动进行初始服务器设置

简介

当您第一次创建新的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控制面板用户数据字段

如果您正在使用**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

结论

自动化初始服务器设置可以节省您的时间,并为进一步的配置奠定良好的基础。如果您要执行其他步骤,您可以在脚本运行后登录以手动继续,或者将这些步骤附加到脚本的末尾以自动执行该过程。

Published At
Categories with 技术
comments powered by Disqus