企业站 | URL |
---|---|
腾讯云 | http://mirrors.tencent.com/ |
阿里云 | https://developer.aliyun.com/mirror/ |
网易 | https://mirrors.163.com/ |
华为 | https://mirrors.huaweicloud.com/ |
首都在线 | https://mirrors.yun-idc.com/ |
分类目录归档:OS
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登录。详细配置请参阅:
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
,此工具更好用,请参考:
Hyper-V虚拟主机Linux Centos 7数据磁盘扩容
一直以来对Hyper-V
Linux
虚拟主机的磁盘扩容困扰,今天将介绍如何利用 fdisk
和 resize2fs
进行数据磁盘扩容。
情况说明:
宿主机系统: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。其算法有两种,分别是RSA
和DSA
。
RSA
是非对称加密算法,可以用来加密和签名。
DSA
(Digital Signature Algorithm) 只能用来数字签名的算法。
以下操作适用于OS:Centos 7
、Ubuntu 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
的朋友来说,此文章非常有用,否则在进行以下步骤时会出现各种报错。
实现方案:
-
- 登录到码云
- 创建私有仓库
- 服务器生成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
注意:上面的路径一定要是绝对路径,否则执行crontab
后mysqldump
成功,但是导出结果为空,手动执行正常!
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
仓库的内容。