一个简单的局域网服务器互联案例(3.5) —— 使用说明

接上篇。这是一篇使用手册。

经过前三篇文章的操作后,已经可以将环境交付给开发人员使用了。这是一篇简单的使用说明。分为管理员篇和开发人员篇。

管理员

所有的操作统一在100机器上进行。

添加用户

例如我们需要添加以为名叫keluTest的用户,使用

./addUser.sh keluTest

即可在4台机器上生成该用户,初始密码是Qweewq,密钥所在位置为 /home/keluTest/.ssh/keluTest

删除用户

./delUser.sh keluTest

即可在四台机器上同步删除用户。

开发人员

使用管理员提供的密钥和密码进行登陆,例如开发人员为keluTest,登陆方式为

ssh keluTest@10.37.231.228:10100
ssh keluTest@10.37.231.228:10101
ssh keluTest@10.37.231.228:10102
ssh keluTest@10.37.231.228:10103

在开发机上简单使用

ssh 100
ssh 101
ssh 102
ssh 103

即可访问。

本地Windows上使用putty或其它工具登陆。其它工具可以直接使用密钥登陆,putty需要生成自用密钥,生成方式参照这篇文章:《一个简单的局域网服务器互联案例 1》putty大概如下图配置即可:


一个简单的局域网服务器互联案例(3) —— 一键生成新用户

接上篇。

背景

在前面的系列里我完成了服务器安装、访问配置、局域网组建和普通网段下对开发网段的访问。一个可用的雏形已经成型。

不过里面还缺少一些东西,其中一个就是开发用户的管理。共用root账号进行服务器操作,虽说可行,也简单粗暴了一些。基本的用户管理也是应该有的。

所以这一篇主要完成在4台机器中创建新用户,并快捷生成密钥的脚本。系统环境为CentOS 7.

过程

脚本的逻辑

  1. 生成一个带有默认密码的用户
  2. 将用户加入wheel组,使之拥有sudo权限(centos下wheel用户组有sudo权限)
  3. 生成密钥
  4. 生成config文件并修改文件属性
  5. 在其它服务器上生成同名账号
  6. 将生成的密钥和配置文件同步到其他服务器上去
  7. 在其他机器上修改文件用户组
  8. 修改本机文件用户组

脚本已经放到github上了:https://github.com/kelvinblood/gist/blob/master/addUser.sh

#!/bin/bash

. /etc/profile


VERSION=' Version 0.0.1, 2017年10月12日, Copyright (c) 2017 kelvinblood';

usage () {
    echo '没有帮助';
}



if [ "$#" -eq 0 ]; then
    usage
    exit 0
fi

case $1 in
    -h|h|help )
        usage
        exit 0;
        ;;
    -v|v|version )
        echo $VERSION;
        exit 0;
        ;;
esac

if [ "$EUID" -ne 0 ]; then
    echo "必需以root身份运行,请使用sudo等命令"
    exit 1;
fi

USERNAME=$1
PASSWDCH="$USERNAME:Qweewq"


if [ -e "/home/$USERNAME" ]; then
    echo '该账户home目录已存在'
    exit 0
fi

useradd $USERNAME -d /home/$USERNAME -G wheel;
echo $PASSWDCH | chpasswd

if [ -e "/home/$USERNAME/.ssh" ]; then
    rm -rf "/home/$USERNAME/.ssh"
fi


mkdir /home/$USERNAME/.ssh
cd /home/$USERNAME/.ssh

sudo ssh-keygen -b 1024 -t rsa -C $USERNAME -f "/home/$USERNAME/.ssh/$USERNAME"
touch authorized_keys
touch config

cat $USERNAME.pub >> authorized_keys
chmod 400 authorized_keys

cat >> config << EOF
# add by weikelu
Host    100
  HostName        172.10.1.100
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
Host    101
  HostName        172.10.1.101
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
Host    102
  HostName        172.10.1.102
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
Host    103
  HostName        172.10.1.103
  Port            22
  User            $USERNAME
  IdentityFile    /home/$USERNAME/.ssh/$USERNAME
EOF

###########################################################

ssh 101 "useradd $USERNAME -d /home/$USERNAME -G wheel"
ssh 101 "echo $PASSWDCH | chpasswd"

cd /home/$USERNAME/.ssh

ssh 101 "mkdir /home/$USERNAME/.ssh"
scp config 101:"/home/$USERNAME/.ssh/config"
scp $USERNAME 101:"/home/$USERNAME/.ssh/$USERNAME"
scp authorized_keys 101:"/home/$USERNAME/.ssh/authorized_keys"
ssh 101 "chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh"

###########################################################

ssh 102 "useradd $USERNAME -d /home/$USERNAME -G wheel"
ssh 102 "echo $PASSWDCH | chpasswd"

cd /home/$USERNAME/.ssh

ssh 102 "mkdir /home/$USERNAME/.ssh"
scp config 102:"/home/$USERNAME/.ssh/config"
scp $USERNAME 102:"/home/$USERNAME/.ssh/$USERNAME"
scp authorized_keys 102:"/home/$USERNAME/.ssh/authorized_keys"
ssh 102 "chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh"

###########################################################

ssh 103 "useradd $USERNAME -d /home/$USERNAME -G wheel"
ssh 103 "echo $PASSWDCH | chpasswd"

cd /home/$USERNAME/.ssh

ssh 103 "mkdir /home/$USERNAME/.ssh"
scp config 103:"/home/$USERNAME/.ssh/config"
scp $USERNAME 103:"/home/$USERNAME/.ssh/$USERNAME"
scp authorized_keys 103:"/home/$USERNAME/.ssh/authorized_keys"
ssh 103 "chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh"

###########################################################

chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh

一个简单的局域网服务器互联案例(2) —— 不同网段下的访问

接上篇。

背景

在上一篇我组建一个由4台服务器组成的局域网。然而这个局域网是有一个限制——必须要接入WiFi才能进行访问和开发。

由于这个局域网和开发人员不处在同一个网段内,每次访问都需要切换到WiFi所在的网络才能访问,非常繁琐,而且如果是在不同楼层,甚至不同地区的开发人员,基本就不能访问了。

所以这一篇的目标是在公司内网环境下可以自由接入该局域网开发环境。

搭建

组网示意图

过程

解决这样的需求有两种方式,一种是类似于花生壳的内网穿透技术,请求发送到外部服务器,外部再转发到内网里来。然而这并不是这次开发中需要的。二是在路由器上做端口映射,像aws一样配置路由即可。

端口映射

如上图配好映射后,同网段内的电脑访问开发机的方式变为:

ssh root@xx.xx.xx.39:10100
ssh root@xx.xx.xx.39:10101
ssh root@xx.xx.xx.39:10102
ssh root@xx.xx.xx.39:10103

今后每当服务器启动某些对外的服务时,通过路由器的这个设置,打开对应的端口映射即可。


一个简单的局域网服务器互联案例(1)

用了一天时间安装服务器和组建局域网,记录一下过程。

背景

组建一个由4台服务器组成的局域网,提供给开发人员使用,要求安装CentOS 7系统,部署好docker环境。

搭建

组网示意图

安装CentOS

最简便的方法是,在官网下载好CentOS镜像,写入U盘,从U盘启动的方式,将系统安装到目标的服务器中。

配置路由器

  1. 配置LAN地址

    为了不和上一级路由器冲突,局域网内最好避免选择诸如192.168.1.1这样的IP地址段。

    想了一下最后用了“172.10.1.1”的IP段。

    配置LAN地址

  2. 配置IP与Mac映射

    在路由器不设定IP与Mac映射时,每当有新的设备连接到网络是,路由器DHCP会随机选择一个可用的IP提供给设备。

    开发环境里我们尽量避免这种不确定性带来的麻烦。

    配置IP与Mac映射

    在这里我配置了100-103,一共4台机器。

配置第一台服务器 - 100

  1. docker ce

    CentOS 下使用的是 yum 命令,更新一下。

     yum update
    

    发现速度不慢,就不更改源地址了。

    然后安装docker ce

     yum install -y yum-utils device-mapper-persistent-data lvm2
     yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
     yum-config-manager --enable docker-ce-edge
     yum-config-manager --enable docker-ce-test
     yum install docker-ce
    

搭建 rsync 服务器

介绍

rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

  rsync 包括如下的一些特性:

1. 能更新整个目录和树和文件系统; 2. 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等; 3. 对于安装来说,无任何特殊权限要求; 4. 对于多个文件来说,内部流水线减少文件等待的延时; 5. 能用rsh、ssh 或直接端口做为传输入端口; 6. 支持匿名rsync 同步文件,是理想的镜像工具。

安装

源码编译

下载地址:https://rsync.samba.org/

tar xvf rsync-3.1.1.tar.gz
cd rsync-3.1.1
./configure --prefix=/usr/local
make && make install

软件包安装

apt-get install rsync

配置

由官方文档可以看出来 rsync 有三个主要文件:

  • rsyncd.conf 是rsync服务器主要配置文件。
  • rsyncd.secrets是登录rsync服务器的密码文件。
  • rsyncd.motd是定义rysnc 服务器信息的,也就是用户登录信息。

rsync的操作有两种 1、启动rsync守护进程的 2、使用remote shell处理的

我选择了第二种情况,特别简单,只需要写好配置文件即可。

mkdir /etc/rsyncd
touch rsyncd.conf

修改配置文件rsyncd.conf

address = 172.104.xx.xx
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow=*
max connections = 5
motd file = /etc/rsyncd/rsyncd.motd
log file=/var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
#transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[cdn]   # 需要同步的文件夹,按照自己的需要写
path = /var/local/cdn
ignore errors
comment =  cdn

运行

服务端运行

rsync  --daemon --config=/etc/rsyncd/rsyncd.conf

建议客户端以下面这种 ssh 的方式运行,可以避免输入密码,更好地自动化

rsync -vzrtopg --delete --progress root@xxx:/var/local/cdn/ /var/local/cdn

客户端结合 cron,就可以达到定时同步的效果了。

参考资料


Linux 禁止 ping 的几种方法

系统层面

临时生效

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all # 忽略所有 ping 指令

echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all # 恢复

永久生效

vi /etc/sysctl.conf 设置

net.ipv4.icmp_echo_ignore_all=1

保存后

sysctl -p

或者输入以下命令

echo net.ipv4.icmp_echo_ignore_all=1 >>/etc/sysctl.conf
echo net.ipv4.icmp_echo_ignore_all=0 >>/etc/sysctl.conf

iptable 丢弃ICMP包

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

然后

iptabels-save

关于 iptable 的用法可以参考我这篇文章。

《Linux管理员应该了解的20条IPTables防火墙规则用法》


1 2 3 4 5 6 44 45 46 47 48