分类目录归档:OS

2024优秀开源镜像站

企业站URL
腾讯云http://mirrors.tencent.com/
阿里云https://developer.aliyun.com/mirror/
网易https://mirrors.163.com/
华为https://mirrors.huaweicloud.com/
首都在线https://mirrors.yun-idc.com/
教育站URL
清华大学https://mirrors.tuna.tsinghua.edu.cn/
中国科技大学https://mirrors.ustc.edu.cn/
北京交通大学https://mirror.bjtu.edu.cn/
浙江大学https://mirrors.zju.edu.cn/
官方站URL
CentOShttps://mirrormanager.fedoraproject.org/mirrors
Ubuntuhttps://launchpad.net/ubuntu/+cdmirrors
Archlinuxhttp://www.archlinux.org/mirrors/status/
Debianhttps://www.debian.org/mirror/list
Fedorahttps://apps.fedoraproject.org/

Let’s Encrypt SSL证书续期失败 ascii编解码器不能编码

今天复查服务器SSL证书,发现Let’s Encrypt证书就快要到期了,查看crontab定时任务计划日志,也是正常执行的。例如:

$ cat /var/log/cron
...
CROND[31471]: (root) CMD (/usr/bin/certbot renew --quiet && /bin/systemctl restart nginx)
CROND[31470]: (root) MAIL (mailed 375 bytes of output but got status 0x004b#012)
CROND[31482]: (root) CMD (run-parts /etc/cron.hourly)
...

奇怪的是,证书并没有正常续期,什么个原因呢,后来手动执行证书更新:

$ /usr/bin/certbot renew --quiet
Attempting to renew cert from /etc/letsencrypt/renewal/renwole.com.conf produced an unexpected error: 'ascii' codec can't encode characters in position 247-248: ordinal not in range(128). Skipping.

All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/renwole.com.conf/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)

更新失败,提示“ascii”编解码器不能编码字符。

经过分析研究发现,开发人员修改了网站根目录,导致LetsEncrypt找不到相关配置文件。
PS:唉,出了问题,都是运维的锅哈。

解决方案

修改以下配置文件中的网站根目录:

$ vim /etc/letsencrypt/renewal/renwole.com.conf
...
# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = None
account = a07a7160ea489g586aeaada1368ce0d6
[[webroot_map]]
renwole.com = /apps/data/www/renwolecom
...

修改蓝色部分为Nginx指定的根目录,其他默认,然后保存即可。

再次更新证书成功。

使用以下命令查看续期状态:

$ certbot certificates

Centos 7添加删除Swap交换分区

Swap介绍:

Linux 将物理内存分为内存段,叫做页面。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放对于页面的内存。物理内存和交换空间的总大小是可用的虚拟内存的总量。

Swap即:交换分区,类似于Windows的虚拟内存,但物理内存不足时,把部分硬盘空间当成虚拟内存使用,从而解决了物理内存容量不足。

优点:节省成本。
缺点:性能不足。

此方法不局限于Centos 7,Linux系统均可使用。

操作用户:root。

1.添加swap交换分区空间

使用dd命令创建swap交换分区文件/dev/mapper/centos-swap,大小为2G:

$ dd if=/dev/zero of=/dev/mapper/centos-swap bs=1024 count=2048000

格式化swap分区:

$ mkswap /dev/mapper/centos-swap

设置交换分区:

$ mkswap -f /dev/mapper/centos-swap

激活swap分区:

$ swapon /dev/mapper/centos-swap

设为开机自动启用:

$ vim /etc/fstab

在该文件底部添加如下内容:

/dev/mapper/centos-swap swap swap default 0 0

2.删除swap交换分区

停止正在使用的swap分区:

$ swapoff /dev/mapper/centos-swap

删除swap分区文件:

$ rm /dev/mapper/centos-swap

删除或注释在/etc/fstab文件中的以下开机自动挂载内容:

/dev/mapper/centos-swap swap swap default 0 0

大功告成!

如何使用Lsyncd复制并实时同步到远程服务器

何为Lsyncd?

Lsyncd 官网 //axkibe.github.io/

Lsyncd监视本地目录树事件监视器接口(inotify或fsevents)。它聚合并将事件组合在一起几秒钟,然后生成一个(或多个)进程来同步这些更改。默认情况下,由rsync实现同步。因此,Lsyncd是一种轻量级的实时镜像解决方案,相对容易安装,不需要新的文件系统或块设备,也不会妨碍本地文件系统的性能。

Rsync+ssh是一种高级操作配置,它使用ssh来执行文件和目录直接在目标上移动,而不是在线路上重新传输移动目标。细粒度的定制可以通过配置文件实现。自定义动作configs甚至可以从头编写,从shell脚本到Lua语言编写的代码。这种方法简单,强大,灵活的配置可以被解决。

Lsyncd 2.2.2要求在所有源和目标机器上rsync >= 3.1

系统环境:

RenwoleServer:10.28.204.65 服务端
RenwoleClient:10.28.204.66 客户端
OS:CentOS Linux release 7.4.1708 (Core) x64

1.rsync的安装

请参阅:《CentOS 7配置Rsync数据文件同步服务器》。

2.安装扩展依赖包

$ yum install -y gcc gcc-c++ lua lua-devel cmake libxml2 libxml2-devel

3.源代码编译安装lsyncd

$ wget //github.com/axkibe/lsyncd/archive/release-2.2.2.tar.gz
$ tar xvf release-2.2.2.tar.gz
$ cd lsyncd-release-2.2.2
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd
$ make && make install
$ ln -s /usr/local/lsyncd/bin/lsyncd /usr/bin/lsyncd

安装过程可能报错:

-- Configuring incomplete, errors occurred!

安装lua-devel即可。

4.设置无密码SSH登录

因为这里使用rsyncssh进行同步,所以还需要配置root账号无密码ssh登录。详细配置请参阅:

如何在Linux中设置SSH无密码登录

5.配置lsyncd

以下是三种常用配置案例

1.远程同步rsyncssh模式配置方案:

$ vim /etc/lsyncd.conf
settings {
    logfile = "/var/log/lsyncd.log",          --日志路径
    statusFile = "/var/log/lsyncd.status",    --状态文件
    pidfile = "/var/run/lsyncd.pid",          --pid文件路径
    statusInterval = 1,                       --状态文件写入最短时间
    nodaemon = false,                         --daemon运行
    maxProcesses = 1,                         --最大进程
    maxDelays = 1,                            --最大延迟
}
sync {
    default.rsyncssh,      --默认rsync+ssh,rsync版本需要升级3以上版本
    source = "/apps/www/renwoleblog/",        --源目录
    delete = true,                            --保持完全同步        
    host = "root@10.28.204.66",         
    targetdir = "/apps/www/renwoleblog/bak/", --目标目录
    exclude={                 
             ".txt"            --需排除的文件
    },
rsync = {
    binary = "/usr/bin/rsync", --需先安装好rsync
    archive = true,            --归档
    compress = false,          --压缩
    owner = true,              --属主
    perms = true,              --权限
    whole_file = false
    },
ssh = {
    port = 22
    }
}

2.本地目录同步配置方案:

sync {
    default.rsync,
    source = "/apps/www/renwoleblog/",
    target = "/apps/www/renwoleblog/bak/",
}

3.远程同步rsync-daemon模式配置方案

sync {
    default.rsync,
    source    = "/apps/www/renwoleblog/",
    target    = "renwole@10.28.204.65::renwolecom",
    delete="true",
    exclude = { ".bak*" },
    delay = 30,
    init = false,
    rsync = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose   = true,
    perms = true,
    password_file = "/etc/rsync.password",
    _extra    = {"--bwlimit=200"}
    }
}

重点参数说明:

--        # 注释符
settings  # 是全局配置
sync      # 定义同步参数
rsync     # 定义同步文件参数
ssh       # 定义服务器远程端口

lsyncd配置文件允许多个sync互不影响。

说明:如果是一对多,请参阅本地同步,修改目标目录即可。

6.创建systemctl系统单元文件

为了实现systemctl进行管理,请创建配置文件以及脚本启动文件,命令如下:

$ vim /etc/sysconfig/lsyncd

添加如下内容:

LSYNCD_OPTIONS="/etc/lsyncd.conf"

创建启动文件:

$ vim /usr/lib/systemd/system/lsyncd.service

添加如下内容:

[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/lsyncd
ExecStart=/usr/local/lsyncd/bin/lsyncd -nodaemon $LSYNCD_OPTIONS

[Install]
WantedBy=multi-user.target

7.启动lsyncd并加入开机自启动

$ systemctl start lsyncd
$ systemctl enable lsyncd

接下来你就可以往源服务器/apps/www/renwoleblog/内上传任意文件,完成后立刻就会同步到客户端 10.28.204.66 /apps/www/renwoleblog/bak/目录内,也可以查看服务端的lsyncd日志文件分析是否同步成功。例如:

[root@RenwoleServer ~] $ cat /var/log/lsyncd.log
...
Fri Dec 22 01:19:22 2017 Normal: Calling rsync with filter-list of new/modified files/dirs
/PCHunter_renwole.com.tar.gz
/
Fri Dec 22 01:19:24 2017 Normal: Finished (list): 0
Fri Dec 22 01:19:32 2017 Normal: Calling rsync with filter-list of new/modified files/dirs
/PCHunter_renwole.com.tar.gz
/
Fri Dec 22 01:19:34 2017 Normal: Finished (list): 0
Fri Dec 22 01:19:34 2017 Normal: Calling rsync with filter-list of new/modified files/dirs
/PCHunter_renwole.com.tar.gz
/
Fri Dec 22 01:19:36 2017 Normal: Finished (list): 0

日志内容显示PCHunter_renwole.com.rar文件成功同步。

另外lsyncd是基于inotify + rsync的开源同步软件,相对于其他同步软件更加安全可靠,占用资源更少,但配置略麻烦。
lsyncd 还支持当监控到某个指定事件时就执行什么样的命令,由于是通过时间延迟和累计事件命中次数来触发同步,在设计上要优于inotify,另外他的同步速度完全取决于你的网络质量。

CentOS 7配置Rsync数据文件同步服务器

何为Rsync?

Rsync是一个非常灵活的命令行网络同步工具,由于它在Linux和类unix系统上的普及,使它被默认包含在大多数Linux发行版中。它在同步文件或文件夹的同时,可以保持原来文件的权限、时间、软硬链接等附加信息, 它可以快速安全的传输数据,并且支持增量更新,传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽,不仅如此它还是开源软件。

环境:

RenwoleServer:10.28.204.65 服务端
RenwoleClient:10.28.204.66 客户端
OS:CentOS Linux release 7.4.1708 (Core) x64

1.分别在服务器端和客户端安装rsync

由于部分Linux发行版默认已安装rsync,但使用的版本 rsync 3.0.9-18.el7 有些旧,所以需手动安装最新版,请看以下具体操作:

2.安装rsync

如已默认安装,请卸载旧版本:

$ yum remove rsync -y

安装rsync有2种方式:

RPM方式的好处,快速、方便、节时,具体安装如下:

$ yum -y install epel-release
$ wget //mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm
$ rpm -Uvh gf-release*rpm
$ yum --enablerepo=gf-plus install rsync -y

rsync文件:

/etc/rsyncd.conf
/etc/sysconfig/rsyncd
/etc/xinetd.d/rsync
/usr/bin/rsync
/usr/share/doc/rsync-3.1.2/COPYING
......

源码安装(推荐)

此种安装方法的好处不但自定义方便,还可使用最新安装包。

安装依赖并下载源码包,编译安装:

$ cd /tmp
$ yum install gcc c++ -y
$ wget //download.samba.org/pub/rsync/rsync-3.1.2.tar.gz
$ tar zxvf rsync-3.1.2.tar.gz
$ cd rsync-3.1.2
$ ./configure --prefix=/usr/local/rsync
$ make -j8 && make install
$ ln -s /usr/local/rsync/bin/rsync /usr/bin/rsync

设置rsync自启动脚本

源码安装需手动将rsync默认提供的脚本拷贝到系统目录,这样才能使用systemctl管理:

$ cp /tmp/rsync-3.1.2/packaging/systemd/* /usr/lib/systemd/system

说明:源代码编译安装,没有/etc/rsyncd.conf主配置文件,需要手动创建,RPM安装方式会自动生成,但都需要根据需求重新配置。

两种安装方式不管使用哪种方法都可以安装成功。

下面将介绍rsync配置篇(以源代码编译安装配置为例)。

3.关于rsync认证方式

rsync有2种常用的认证方式,一种是rsync-daemon,另一种是SSH。在生产环境中,通常使用rsync-daemon认证模式。

认证模式说明:

1.rsync-daemon认证:默认监听TCP的873端口。前提是双方都需要安装rsync,客户端可不启动rsync服务,但需要简单的配置。服务器端需要启动且需在服务器端配置rsync。

2.SSH认证:通过系统用户认证,即在rsync上通过SSH隧道进行传输,前提是需要服务器端与客户端建立无密码登录,可参阅这里《如何在Linux中设置SSH无密码登录》。无需服务器与客户端配置rsync,也无需启动rsync服务,只需双方都安装rsync即可。

4.设置rsync服务端密码 10.28.204.65

本教程使用rsync-daemon认证方式。创建访问密码,格式为 用户名:密码,一行一个,明文。

$ echo "renwole:renwolecom"  >>/etc/rsync.password
$ chmod 600 /etc/rsync.password

5.配置rsync服务端 10.28.204.65

配置完成后的内容如下:

$ cat /etc/rsyncd.conf

uid = root               # 运行RSYNC守护进程的用户
gid = root               # 运行RSYNC守护进程的组
port = 873               # 默认端口
#address = 10.28.204.65  # 服务器IP地址
# pid file = /var/run/rsyncd.pid   # 进程启动后,进程号存放路径
lock file = /var/run/rsync.lock  # 设置锁文件名称
log file = /var/log/rsyncd.log     # 指定rsync的日志文件

use chroot = no          # 不使用chroot
read only = yes          # 只读,不让客户端上传文件到服务器
transfer logging = yes   # 将传输操作记录到传输日志文件

hosts allow=10.28.204.66           # 允许哪些主机访问(多个以空格隔开)
hosts deny=*                       # 拒绝哪些主机访问
max connections = 3                # 最大连接数
# motd file = /etc/rsyncd.motd     # 登陆欢迎信息(生产环境不建议)

log format = %t %a %m %f %b        # 指定日志记录的格式
syslog facility = local3           # 消息级别
timeout = 600                      # 会话超时时间。

[renwolecom]             # 模块的名称,可以自定义
path = /apps/www         # 需要同步的目录
list=yes                 # 是否允许用户列出文件,默认为true
ignore errors            # 忽略错误信息
# exclude = myrenwole/   # 不同步的目录(多个以空格隔开)
comment = RenwoleCombak  # 注释内容,任意
auth users = renwole     # 那些用户才允许连接该模块,多个以,隔开
secrets file = /etc/rsyncs.pass    # 认证时所需的密码文件

更多配置请参阅://www.gsp.com/cgi-bin/man.cgi?topic=rsyncd.conf

两个注意说明

注意:如果你拷贝以上配置项,请去掉注释说明,否则可能会出现未知问题。
注意:全局配置中的选项对所有模块有效;模块下定义的仅对当前模块有效;另外,模块中定义选项值优先于全局配置。

6.设置firewall防火墙

$ firewall-cmd --add-port=873/tcp --permanent
$ firewall-cmd --add-port=873/udp --permanent
$ firewall-cmd --reload

7.配置rsync客户端 10.28.204.66

客户端无需配置模块,也无需启动服务,配置文件只需简单配置即可,例如:

$ vim /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
port = 873
secrets file = /etc/client.pass

8.在客户端设置密码 10.28.204.66

添加密码并设置权限:

$ echo "renwolecom"  >>/etc/client.pass
$ chmod 600 /etc/client.pass

说明:只需添加服务端的密码即可,无需用户。

9.启动并加入开机自启动

$ systemctl start rsync
$ systemctl enable rsync
$ systemctl list-unit-files

10.测试rsync文件同步

rsync客户端 10.28.204.66 连接服务端测试

$ /usr/bin/rsync -avzrtopg --progress --delete --password-file=/etc/client.pass renwole@10.28.204.65::renwolecom /apps/www

客户端连接参数说明:

-avzrtopg 拆分讲解:

a # 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD;
v # 详细模式输出;
z # 对备份的文件在传输时进行压缩处理;
r # 对子目录以递归模式处理;
topg       # 保持原文件属性如属主、时间的参数。

--progress # 显示详细的同步进度情况。
--delete   # 若服务端端删除了这一文件,客户端也相应删除,保持文件一致。

更多参数请查看rsync帮助:

$ /usr/bin/rsync -h

最后是问题总结

可能的报错信息:

@ERROR: auth failed on module renwole

此报错有两种原因导致:

1.要么在服务端配置的用户密码不正确导致。
2.要么就是服务器和客户端的密码文件不是600权限所致。

rsync: failed to connect to 10.28.204.65 (10.28.204.65): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [Receiver=3.1.2]

此种无法连接到rsync服务端报错只有一种情况:

1.防火墙并未放行873端口或服务未启动,解决:关闭防火墙或放行端口即可。

启动如果报错,多看看日志,就知道解决的方法了。

如果你觉得配置比较麻烦,建议您使用lsyncd,此工具更好用,请参考:

如何使用Lsyncd复制并实时同步到远程服务器

Hyper-V虚拟主机Linux Centos 7数据磁盘扩容

一直以来对Hyper-V Linux虚拟主机的磁盘扩容困扰,今天将介绍如何利用 fdiskresize2fs 进行数据磁盘扩容。

情况说明:

宿主机系统:Windwos Server 2012 R2 Hyper-V
虚拟主机:CentOS Linux release 7.4.1708 (Core)

平时接触Hyper-V较多,所以对磁盘扩容那是常有的事。Windwos磁盘扩容最简单,本文就不多介绍了。
今天我将以Centos虚拟主机进行演示,该小机分为两块磁盘(都是独立磁盘),一块是系统盘/dev/sda,另一块是数据库盘/dev/sdb,现在的需求是sdb需要在不影响数据的情况下从原来的30GB扩容为100GB

1.扩容前先查看磁盘分区及挂载情况

[root@renwole-com ~]# fdisk -l

Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x5f149419

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    62914559    31456256   83  Linux

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00043041

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

Disk /dev/mapper/cl-root: 8585 MB, 8585740288 bytes, 16769024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/cl-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
[root@renwole-com ~]# df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root xfs       8.0G  950M  7.1G  12% /
devtmpfs            devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs               tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs               tmpfs     1.9G  8.3M  1.9G   1% /run
tmpfs               tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1           xfs      1014M  138M  877M  14% /boot
tmpfs               tmpfs     379M     0  379M   0% /run/user/0
/dev/sdb1           ext4       30G   60M   28G   1% /apps

注意:橙色部分 /dev/sdb1 分区大小是30GB,挂载的也是30GB

2.卸载挂载

删除 /etc/fstab 文件中以下开机磁盘自动挂载信息:

/dev/sdb1 /apps ext4 defaults 0 0

3.开始虚拟主机磁盘扩容

Hyper-V虚机操作:

打开Hyper-V 管理器,找到需要扩容的小机并关机,然后右击设置,点击需要扩容的磁盘,(一般是数据盘)编辑 – 默认下一步 – 选择扩展下一步,这一步骤需要注意,假设你原有磁盘为30G,那么你想扩展到100G,请填写100即可,点击下一步完成。然后启动虚拟主机。

查看扩容后的磁盘分区情况:

[root@renwole-com ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00043041

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x5f149419

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    62914559    31456256   83  Linux

Disk /dev/mapper/cl-root: 8585 MB, 8585740288 bytes, 16769024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/cl-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

sdb分区大小由原来的30GB扩展到100GB了,但分区sdb1并没有使用扩容的70GB空间,怎么办呢?

4.删除分区

删除分区不同等删除数据,删除分区再重建:

[root@renwole-com ~]# fdisk /dev/sdb

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d                 # 删除sdb1分区
Selected partition 1
Partition 1 is deleted

Command (m for help): n			# 新建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1	# 指定分区号
First sector (2048-209715199, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199):
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set

Command (m for help): w                 # 输入w保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

再次查看磁盘分区情况

[root@renwole-com ~]# fdisk -l
...
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x5f149419

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   209715199   104856576   83  Linux
...

已经从原来的30G扩展成100G了,但现在还不能使用,需要进行如下操作才算真正扩容成功:

[root@renwole-com ~]# resize2fs -f /dev/sdb1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/sdb1 to 26214144 (4k) blocks.
The filesystem on /dev/sdb1 is now 26214144 blocks long.

扩容成功。

5.挂载磁盘

[root@renwole-com ~]# mount /dev/sdb1 /apps/
[root@renwole-com ~]# df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root xfs       8.0G  950M  7.1G  12% /
devtmpfs            devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs               tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs               tmpfs     1.9G  8.3M  1.9G   1% /run
tmpfs               tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1           xfs      1014M  138M  877M  14% /boot
tmpfs               tmpfs     379M     0  379M   0% /run/user/0
/dev/sdb1           ext4       99G   60M   94G   1% /apps
[root@renwole-com ~]# ls /apps/
web  mysql

如上所示,Linux虚拟主机数据盘已经成功扩容,查看数据并无丢失。

另外再次将你的磁盘信息写入到 /etc/fstab 文件中,不然重启后磁盘还需要手动挂载。

注意:还是那句话,操作任何数据之前,一定要先备份,养成良好的习惯,以防止数据丢失。

CentOS 7配置使用SFTP服务器

何为SFTP?

SFTP,即 SSH 文件传输协议( SSH File Transfer Protocol ),或者说是安全文件传输协议( Secure File Transfer Protocol )。SFTP 是一个独立的 SSH 封装协议包,通过安全连接以相似的方式工作。它的优势在于可以利用安全的连接传输文件,还能浏览本地和远程系统上的文件系统。

在很多情况下,SFTP都比FTP更可取,因为它具有最基本的安全特性和能利用 SSH 连接的能力,FTP是一种不安全的协议,只能在有限的情况下或在您信任的网络上使用。

先决条件:

服务器 OpenSSH-Server 版本最低4.8p1,因为配置权限需要版本添加的新配置项 ChrootDirectory 来完成。

如何查看OpenSSH版本,命令如下:

$ ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

1.创建用户信息

添加用户组:

$ groupadd sftp

添加用户:

$ useradd -g sftp -s /sbin/nologin -M userrenwolecom

参数注解:

-g              # 加入用户组
-s              # 指定用户登入后所使用的shell
/sbin/nologin   # 用户不允许登录
-M              # 不要自动建立用户的登入目录

设置用户密码:

$ passwd userrenwolecom

2.创建用户目录并设置权限

创建sftp主目录:

$ mkdir /data/sftp

设置sftp主目录权限:

$ chown root:sftp /data/sftp

文件夹所有者必须是root,用户组可以不是root。

$ chmod 744 /data/sftp

权限不能超过755但不包括755,否则会导致登录报错。

3.创建上传目录并设置权限

/data/sftp/主目录下创建uploads资料夹,并设置所有者是:userrenwolecom,用户组隶属:sftp,这样新增的帐号才能有上传编辑的权限。

$ mkdir -p /data/sftp/uploads
$ chown userrenwolecom:sftp /data/sftp/uploads

4.修改sshd_config配置文件

$ vim /etc/ssh/sshd_config

将此行注释掉,例如:

#Subsystem sftp /usr/libexec/openssh/sftp-server

在此行下面添加如下内容:

Subsystem sftp internal-sftp       # 指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp                   # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
ChrootDirectory /data/sftp/        # 限制用户的根目录
ForceCommand internal-sftp         # 只能用于sftp登录
AllowTcpForwarding no              # 禁止用户使用端口转发
X11Forwarding no                   # 禁止用户使用端口转发

5.重启SSH服务

$ systemctl restart sshd

6.测试是否能够登录、上传、下载等操作

10.28.204.61服务器执行以下命令登录:

$ sftp -P 12012 userrenwolecom@10.28.204.62
userrenwolecom@10.28.204.62's password:
packet_write_wait: Connection to 10.28.204.62 port 12012: Broken pipe
Couldn't read packet: Connection reset by peer

报错,此问题是由于/data/sftp 目录权限分配不当所致,将此目录的所有者更改为root即可,用户组可root/sftp

再次测试连接:

$ sftp -P 12012 userrenwolecom@10.28.204.62
The authenticity of host '[10.28.204.62]:12012 ([10.28.204.62]:12012)' can't be established.
ECDSA key fingerprint is SHA256:/YI/L4RT1QH7lkfxMCAkKnvniQslyUl15mOUKUo8K3k.
ECDSA key fingerprint is MD5:6d:b6:f3:93:8e:48:53:24:9d:5d:c2:2a:5f:28:f4:d2.
Are you sure you want to continue connecting (yes/no)? YES
Warning: Permanently added '[10.28.204.62]:12012' (ECDSA) to the list of known hosts.
userrenwolecom@10.28.204.62's password:【输入userrenwolecom用户密码回车】
Connected to 10.28.204.62.
sftp>

连接成功,现在测试上传一个文件到10.28.204.62服务器

上传

sftp> put /tmp/nginx_log_stat /uploads
Uploading /tmp/nginx_log_stat to /uploads/nginx_log_stat
/tmp/nginx_log_stat

下载

sftp> get uploads/nginx_log_stat /mnt
Fetching /uploads/nginx_log_stat to /mnt/nginx_log_stat
/uploads/nginx_log_stat   100%    7   1.1KB/s   00:00
sftp>

删除

sftp> rm /uploads/nginx_log_stat
Removing /uploads/nginx_log_stat

更多命令请参阅:

sftp> help

小结:

在配置过程中遇到比较奇怪的问题,我将 sshd_config 配置文件中的 Match Group sftp 修改为 Match User userrenwolecom ,重启sshd后,当前终端不会断开,新建终端输入正确密码后会出现SSH登录闪退(自动关闭终端)问题,不管是用PUTTY还是Xshell均是如此,后来我将用户修改成组后就正常了,具体原因尚未可知,不过修改为组效果是一样的。如果你知道什么原因还请指教。

如何在Linux中设置SSH无密码登录

作为一名运维人员来说,管理1-5台机器尚有余力,但如果是10台、100台或更多服务器,是不是每次登录输入密码非常繁琐,且费时费力,无法提高工作效率。
今天我们通过使用ssh-kengen命令生成私钥&公钥对,目的:免密码登录SSH。其算法有两种,分别是RSADSA

RSA 是非对称加密算法,可以用来加密和签名。
DSA(Digital Signature Algorithm) 只能用来数字签名的算法。

以下操作适用于OS:Centos 7Ubuntu 17,其他系统没测,理论上都可以使用。

服务器:

10.10.204.63
10.10.204.64

1.如何生成ssh公钥

登录10.10.204.63服务器生成公私密钥对:

[root@10-10-204-63 ~]# ssh-keygen -b 4096 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qLcoj2nSzq6G9ZpFQZ/OFqFT+oBDf3ousHkt82F1/xM root@10-10-204-63.10.10.204.63
The key's randomart image is:
+---[RSA 4096]----+
|  . . o          |
| . + = o         |
|  o B =          |
|   . X o         |
|  . o B S .      |
|  .= * . . .  E  |
|.oo.B *     .  . |
|oo+*.O o     ..  |
|o*O+o o       .. |
+----[SHA256]-----+

三次回车即可生成 ssh key

注解:

-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位,最长4096字节。
-t 指定要创建的密钥类型。可以使用:”rsa1″(SSH-1) “rsa”(SSH-2) “dsa”(SSH-2)。

2.查看生成的文件

[root@10-10-204-63 ~]# ll .ssh/
total 8
-rw------- 1 root root 3243 Nov 25 15:58 id_rsa
-rw-r--r-- 1 root root  758 Nov 25 15:58 id_rsa.pub

说明:

id_rsa 私钥
id_rsa.pub 公钥

3.将公钥上传到10.10.204.64

[root@10-10-204-63 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.204.64
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.10.204.64 (10.10.204.64)' can't be established.
ECDSA key fingerprint is SHA256:/YI/L4RT1QH7lkfxMCAkKnvniQslyUl15mOUKUo8K3k.
ECDSA key fingerprint is MD5:6d:b6:f3:93:8e:48:53:24:9d:5d:c2:2a:5f:28:f4:d2.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.10.204.64's password:【输入服务器密码回车】

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@10.10.204.64'"
and check to make sure that only the key(s) you wanted were added.

上传成功。

4.修改SSH配置文件

登录10.28.204.64修改,操作如下:

$ vim /etc/ssh/sshd_config

去除以下注释:

RSAAuthentication yes
PubkeyAuthentication yes

5.重启SSH服务

$ systemctl restart sshd

6.测试免密码登录10.10.204.64

[root@10-10-204-63 ~]# ssh 'root@10.10.204.64'
Last failed login: Sat Nov 25 16:09:48 CST 2017 from 83.234.149.66 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Nov 25 15:57:33 2017 from 36.7.69.84
[root@10-10-204-64 ~]#

在不输入密码的情况下成功登录。

登陆成功后,建议在10.10.204.64服务器上也生成ssh公钥,并上传到10.10.204.63服务器,这样以来我们就可以相互免密码SSH登陆。多台服务器亦是如此。

7.查看公钥

[root@10-10-204-64 ~]# ll /root/.ssh/
total 8
-rw-------  1 root root 758 Nov 25 16:08 authorized_keys
-rw-r--r--. 1 root root 175 Aug  9 09:19 known_hosts

authorized_keys是刚上传过来的公钥名称

8.如果公钥丢失,可以使用私钥再次生成公钥,命令如下:

[root@10-10-204-63 ~]# ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

完结。

MySQL自动备份并提交到码云Git仓库

之所以选择码云是因为其私有仓库是免费的,而GitHub私有仓库是收费,约7+美元一月,对于个人开发者似乎也是一笔不小的费用。

在创建自动将备份上传到码云Git仓库前,建议您先看下以下文章:

如何通过Git将本地项目推送到码云或GitHub

对于不太了解Git的朋友来说,此文章非常有用,否则在进行以下步骤时会出现各种报错。

实现方案:

    • 登录到码云
    • 创建私有仓库
    • 服务器生成ssh公钥
    • 创建SSH公钥

以上步骤在上文中有详细说明。

1.创建shell脚本文件:

$ cd /mnt/renwole
$ vim mysqlbak.sh

2.添加以下内容:

#!/bin/bash
createAt=`date +%Y-%m-%d-%H:%M:%S`
mysql_back_path=/mnt/MySQL-Bak
/usr/local/mysql/bin/mysqldump -u数据库用户名 -p密码 数据库名 > $mysql_back_path/renwoleblog-$createAt.sql
# 自动删除7天前的备份
# -type 文件类型 f是文件
find $mysql_back_path -name "*.sql" -type f -mtime +7 -exec rm -rf {} \;
cd $mysql_back_path
git add -A
git commit -m "${createAt}"
git push origin master

注意:上面的路径一定要是绝对路径,否则执行crontabmysqldump成功,但是导出结果为空,手动执行正常!

3.设置执行权限:

$ chmod +x mysqlbak.sh

4.添加任务计划:

通过crontab定时执行备份脚本

$ crontab -e

插入如下内容:

*/50 2 * * * /mnt/renwole/mysqlbak.sh
$ systemctl restart crond

设置完成后,每日凌晨2点50分,自动备份mysql数据库并推送到码云git仓库,后期可以通过Git查看历史提交的版本。再也不用担心数据丢失了。

如何通过Git将本地项目提交到码云或GitHub

何为码云?

码云是专为开发者提供稳定、高效、安全的云端软件开发协作平台。
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。

PS:

说白了就是和Github一样。但没有Github的开发者和项目多,再怎么说,人家是全球性的。
但码云速度快(毕竟在国内),私有仓库免费,而且不限制私有库和公有库数量,可以作为备份仓库。

OS环境:CentOS Linux release 7.4.1708 (Core)

1.安装配置Git

$ yum install git -y
$ git config --global user.name "renwole"
$ git config --global user.email renwole@renwole.com

2.在终端生成ssh公钥

执行下面命令,三次回车即可生成 ssh key

$ ssh-keygen -t rsa -C "renwole@renwole.com"

3.查看生成的public key

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDR9k1FgZRJN3P7V9tLfWZQ......

将以上打印出屏幕的内容添加到码云。

说明:SSH key添加地址://gitee.com/profile/sshkeys。公钥标题任意。

4.测试是否可以信任连接

添加后,在终端中输入以下命令:

$ ssh -T git@gitee.com
The authenticity of host 'gitee.com (120.55.226.24)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:79:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes【输入yes回车】
Warning: Permanently added 'gitee.com,120.55.226.24' (ECDSA) to the list of known hosts.
Authentication failed.

再次执行:

$ ssh -T git@gitee.com
Welcome to Gitee.com, yourname!

返回信息表示已经成功。

5.在码云创建私有仓库

打开码云首页 – 登录 – 点击右上角圆形+号 – 填写你的项目信息 – 创建完成。

打开你的项目地址,例如:

//gitee.com/renwole/renwolecom

点击克隆/下载 – 获取你的SSH地址,下面要用到。

6.把远程仓库项目clone到本地

$ cd /mnt
$ git clone git@gitee.com:renwole/renwolecom.git
Cloning into 'renwolecom'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (11/11), 19.51 MiB | 5.46 MiB/s, done.
Resolving deltas: 100% (2/2), done.
$ cd renwolecom
$ ll
total 16
-rw-r--r--. 1 root root 10254 Nov 22 09:26 LICENSE
-rw-r--r--. 1 root root    13 Nov 22 09:26 README.md

已经成功克隆到本地。

7.提交项目

你可以将renwolecom目录视为你的项目,鲁完代码直接提交。

无论此项目是否多人参与,push之前先pull,看是否有merge代码,若存在merge就解决merge,若无,请执行以下命令:

$ git pull origin master
$ git add -A
$ git commit -m 'init'
$ git push origin master

8.删除GIT仓库所有提交历史记录

8.1.Checkout

$ git checkout --orphan latest_branch

8.2. Add all the files

$ git add -A

8.3. Commit the changes

$ git commit -am "commit message"

8.4. Delete the branch

$ git branch -D master

8.5.Rename the current branch to master

$ git branch -m master

8.6.Finally, force update your repository

$ git push -f origin master

删除远程文件,本地保留:

$ git rm --cached 文件名
$ git commit -m "remove file from remote repository"
$ git push

删除远程文件夹,本地保留:

$ git rm --cached -r 文件夹名
$ git commit -m "remove directory from remote repository"
$ git push

注意:删除文件夹请使用 -r 参数。

说明:最后上传项目时可选参数 git push origin master -f 表示强制推送要上传的文件。

执行结束后,可以刷新项目地址并查看从本地push仓库的内容。