还算比较完善的 Linux 服务器自动备份、上传脚本

脚本托管于gist,点击查看

由于内嵌会导致一定程度的网页加载阻塞,故此处内嵌并非实时版本。

#!/bin/bash
Err() { echo -ne "\e[1;31m"; Log "$@" 1>&2; echo -ne "\e[0m";}
Log() { echo $(date +"[%Y-%m-%d %H:%M:%S]") $@; }
Log ====每日备份脚本开始运行====
UPLOADER_BIN="/root/auto-scripts/bpcs_uploader/bpcs" #bpcs 上传脚本路径(见下方bpcs文件)
REMOTE_DIR=$(date +"%Y%m")/$(date +"%Y%m%d") # 远端上传路径
WORKING_DIR="/root/auto-scripts/backup_daily" # 工作路径
CONFIG_DIR=$WORKING_DIR/list.d #配置文件路径
BACKUP_DIR=$WORKING_DIR/backups #本地备份路径
CURRENT_DIR=$BACKUP_DIR/$(date +"%Y%m%d")
OLD_DIR=$BACKUP_DIR/$(date -d -3day +"%Y%m%d")
zipPassword=ChangeThePasswordToYourOwn #备份密码
#准备删除老文件
Log 删除旧备份文件夹:$OLD_DIR
rm -rf $OLD_DIR
#创建新目录
mkdir -p $CURRENT_DIR
#遍历配置目录,进行备份
for i in $(ls $CONFIG_DIR)
do
zipExclude="*/cache/* */tmp/* */temp/* */.npm/* */data/threadcache/*"
. $CONFIG_DIR/$i
Log 备份$backupDir为$i……
backupFile=$i.zip
zip -r -P $zipPassword $CURRENT_DIR/$backupFile $backupDir -x $zipExclude
Log 上传备份……
$UPLOADER_BIN upload $CURRENT_DIR/$backupFile $REMOTE_DIR/$backupFile
done
Log 备份完成!

用法懒的写,自己研究!

依赖:bpcs_uploader,以及 zip 。yum install zip

在Linux下使用ftp.proxy搭建FTP反向代理/透明代理

由于某些原因,自己的FTP服务器访问起来相当不顺畅。好在手上有速度稍快的资源可以拿来当反代,Google了一大堆,最后终于找到了一个合适的项目,叫 ftp.proxy 。ftp.proxy 是一个提供 FTP 代理的程序,支持透明代理,也支持标准化的 FTP 代理。这里我们把它配置为透明(反向)代理来使用。

首先,到 ftp.proxy 的下载页面 查看最新的 ftp.proxy ,在服务器上下载它。写这篇文章的时候,最新的 ftp.proxy 是1.2.3。由于这个项目已经快10年没有更新了(The current stable version of ftp.proxy is 1.2.3 Released 30. July 2004),为了防止官方出现某些意外的错误,我把它放了一份到了百度网盘上,你可以考虑下载它。

wget http://www.ftpproxy.org/download/ftpproxy-current.tgz

然后就是编译安装。如同官网所说,这是一个“old story”。

tar -xvf ftpproxy-1.2.3.tgz #文件名请自行修改
cd ftpproxy-1.2.3/
make
mkdir /usr/local/man #如果出错是没关系的
sudo make install

安装的时候遇到了一个错误,是因为自己的 CentOS 并没有/usr/local/man/这个目录。修正的方法已经写在上面了。

然后就可以开始使用ftp.proxy了。如下:

ftp.proxy -D 12580 192.168.1.1:10086

其中12580是你要在反代服务器上监听的端口,而10086则是原服务器的端口。

在本地试着连接一下,Enjoy it~

在CentOS 6下安装配置Squid缓存服务器

基于成本考虑,这次把博客折腾换到了东海岸。

东海岸的机房真不是一般的慢啊,已经快慢掉渣了。不争气的服务器和拉车的老牛一样慢,一个页面四五秒钟都加载不起来。

翻了一下现在市面上的CDN,都不满意,不是速度慢就是被墙了,想来想去,还是自己再弄个LA机房的服务器反代过去,充当一个“伪”CDN好了。

于是弄了个LA机房的VPS,还是自己习惯的CentOS6.2。不知道为何对CentOS比较有感情,虽然最近接触Debian觉得真是个好系统。说不定从哪天开始就移情别恋了=-=

好了说正事。在CentOS下装Squid并不难,如下:

yum install squid

好吧如果文章就到这里就没有了你们一定会喷我的。所以文章还没结束——还有最重要的,把Squid作为一个反向代理服务器来配置。

用yum装好之后,squid的主配置文件在/etc/squid/squid.conf,装好之后里面一堆东西,其实我们全部都可以不要。如下把它删掉:

mv /etc/squid/squid.conf /etc/squid/squid.conf.bak
vim /etc/squid/squid.conf

然后敲以下配置:

acl manager proto cache_object
http_access deny manager
http_access allow all
http_port 80  accel vhost vport #反向代理监听端口
cache_peer 192.168.1.1 parent 80 0 no-query originserver round-robin  name=web #源服务器端口和IP地址,以及名字
cache_peer_domain web !localhost #对应域名设定源服务器
forwarded_for truncate #截断X-Forwarded-For,防止IP地址欺骗;也可以不要这一行
cache_mem 32 MB #内存缓存大小
cache_dir ufs /var/spool/squid 100 16 256 #磁盘缓存设置
coredump_dir /var/spool/squid
refresh_pattern -i (/cgi-bin/|\?) 0    0%      0
refresh_pattern -i \.php 0    0%      0
refresh_pattern .              0       20%     4320

如果像我一样只有一台服务器,那就按上面的配置就好了,把192.168.1.1改成你源站的服务器,然后就算设置完成了。

如果你有很多不同的服务器,然后想对应不同的域名,就修改其中的cache_peer如下:

cache_peer 192.168.1.1 parent 80 0 no-query originserver round-robin  name=web1
cache_peer_domain web1 best33.com
cache_peer 192.168.1.2 parent 80 0 no-query originserver round-robin  name=web2
cache_peer 192.168.1.3 parent 80 0 no-query originserver round-robin  name=web3
cache_peer_domain web2 web3 oott123.com

最后重启squid,设置开机自启动

service squid restart
chkconfig squid on

这样就算配置完了。

连接ssh出现Permission denied之一解

问题描述:

在一台centos 6.0的vps上使用ssh无论连接什么样的主机都连接不上,提示信息为:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

排除了防火墙等原因,百思不得其解。后来在man ssh里面发现了一个参数-v

     -v      Verbose mode.  Causes ssh to print debugging messages about its
             progress.  This is helpful in debugging connection, authentica‐
             tion, and configuration problems.  Multiple -v options increase
             the verbosity.  The maximum is 3.

于是使用ssh -v localhost试图连接。在debug信息里面发现一条很奇怪的信息,如下:

debug1: Next authentication method: password
debug1: read_passphrase: can't open /dev/tty: No such file or directory

尝试使用password模式时,没办法调用read_passphrase来获取密码。提示/dev/tty这个文件缺失。

于是在本地的cygwin(我是win环境)下用ls -l /dev/tty得到以下信息:

crw-rw-rw- 1 oott123 None 5, 0 十月  5 14:53 /dev/tty

使用mknod /dev/tty c 5 0来创建一个新的设备文件,故障解除。

后来##Orz的atmouse发现了这个页面,和我遇到的问题一模一样:【这里】,解决方式也是一样的。