使用 ssh 代理

1. ssh 代理的好处

若用户有一台服务器,该服务器网络速度快,或是可以正常访问国外网站的国外主机。则可以以此服务器为跳板,通过 ssh 代理来快速访问网络内容,或翻墙访问国外网页。

2. ssh 代理设置

此方法是在使用 linux 系统下的设置,在本地机器运行命令:

$ ssh -qTfnN -D 4241 chenlianfu@122.205.95.116

表示可以通过 IP 为 122.205.95.116 的服务器为跳板,访问网络。

3. firefox 设置

设置代理服务器为 localhost, 端口 4241, socks5 类型,即可使用代理了。

3. sshd 设置保持 ssh 持续连接

修改 /etc/ssh/sshd_config 文件内容:

ClientAliveInterval 60

Apache 和 Tomcat 整合

1. Apache 和 Tomcat 的联系

Apache 主要用于支持静态网页, 而 Tomcat 主要用于支持动态网页。 比如运行 WortPress 使用 apahce, 运行 WebApollo 这样的 java 网页则使用 Tomcat。Apache 是 web 服务器, Tomcat 是应用(java)服务器。 Tomcat 可以认为是 apache 的扩展,但是可以独立于 apache 运行。
由于学校只开放了 80 端口,而 Tomcat 运行在 8080 端口。为了能让 WebApollo 在 80 端口被访问,因此需要将 java 请求通过 apache 转发给 tomcat 处理。

2. 安装 Apache 和 Tomcat

整合 Apache 和 Tomcat 需要安装 jakarta-tomcat-connectors

使用 yum 安装 Apache
$ sudo yum install httpd httpd-devel

安装  jakarta-tomcat-connectors
$ wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
$ tar zxf tomcat-connectors-1.2.40-src.tar.gz 
$ cd tomcat-connectors-1.2.40-src/native/
$ ./configure --with-apxs=/usr/sbin/apxs
$ make

安装 Tomcat,直接下载二进制包解压缩即可使用

3. 配置 JK 以整合 Apache 和 Tomcat

首先,在 /etc/http/conf.d/ 目录下建立文件 mod_jk.conf,内容如下:

# 载入 jk 模块
LoadModule jk_module modules/mod_jk.so
# 指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /etc/httpd/conf/workers.properties
JkMountFile   /etc/httpd/conf/uriworkermap.properties
JkLogFile  /etc/httpd/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
# 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1

将以下内容写入 /etc/http/conf/workers.properties :

# Defining a worker named worker1 and of type ajp13
# 创建名为 worker1 的 worker
worker.list=worker1

# Set properties for worker1
# work1 使用ajp13协议与tomcat 进程通讯
worker.worker1.type=ajp13
# 监听ajp13请求的的tomcat worker主机地址
worker.worker1.host=localhost
# 默认情况下tomcat在ajp13协议中使用的端口为8009
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

将以下内容写入 /etc/httpd/conf/uriworkermap.properties :

/*=worker1
!/*.jpg=worker1
!/*.gif=worker1
!/*.png=worker1
!/*.bmp=worker1
!/*.html=worker1
!/*.htm=worker1
!/*.swf=worker1
!/*.css= worker1
!/*.js= worker1

上述内容表示: ‘/’表示网页中的相对路径; /*=worker1 表示将‘/’目录下所有的请求都交给 worker1 (workers.properties 文件中指定的)来处理;模块会首先在‘/’目录过滤掉所有图片、flash、js文件、css文件和静态网页,将剩下的文件类型自己全部处理。

4. 配置 Apache 和 Tomcat 展示指定的目录

对 Tomcat 中的 webApp 目录进行展示。
首选修改 Apache 的 /etc/httpd/conf.d/httpd.conf 文件

Alias /tomcat "/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps"
<Directory "/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps">
    Options Includes FollowSymLinks 
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>

再修改 /opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/conf/server.xml 文件

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      errorReportValveClass="org.bbop.apollo.web.ErrorReportValve">
      <Context path="/tomcat" docBase="/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps/" debug="0" reloadable="true" crossContext="true"/>
      ...
</Host>

以上修改都表示将目录 /opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps/ 展示到网页中的 /tomcat 目录下。

5. 使用代理进行整合

此外,还有两种非常简易的方法进行整合。
默认情况下,Tomcat 对外开启了 8080 端口,以 HTTP/1.1 协议运行; 同时,也开启了 8009 端口,以 AJP/1.3 协议运行。这两种协议可以同时生效,也可以按需要仅保留一个即可。
因此,只需要使用 Apache 的 mod_proxy.so, mod_proxy_http.so, mod_proxy_ajp.so 等模块,即可使用代理的方法来整合 Apache 和 Tomcat。这些模块默认情况下都存在并是开启着的。
因此,配置如下设置即可:

ProxyPass /tomcat http://www.chenlianfu.com:8080
或
ProxyPass /tomcat ajp://www.chenlianfu.com:8009

CentOS 语音生成 TTS

TTS, 即 test to speech ,表示将文本转为为阅读的语音。

1. 中文 TTS

使用 ekho 是个不错的选择,其官网:http://www.eguidedog.net/ekho_cn.php
ekho 的下载与安装

$ wget http://downloads.sourceforge.net/e-guidedog/ekho-5.7.tar.xz
$ tar Jxf ekho-5.7.tar.xz
$ cd ekho-5.7
$ sudo yum install libsndfile*
$ ./configure && make && make install

上述安装的 ekho 紧能阅读中文

$ ekho "这次公务员涨工资,博士后也跟着涨吗?现在一个月才2000多,是2006年的标准,有点少啊。"

2. 英文 TTS

espeak 和 festival 都能进行英文 TTS

$ echo "It's such a beautiful day! Why are you in front of the computer?" | festival --tts
$ echo "It's such a beautiful day! Why are you in front of the computer?" | espeak

Centos 安装 HP Deskjet 1010 驱动

Linux 下安装 HP Deskjet 1010 驱动需要安装 HPLIP, 可以参考: HPLIP Manual Install.

$ sudo yum -y -d 10 -e 1 install cups cups-devel gcc-c++ ghostscript libjpeg-devel glibc-headers libtool libusb-devel make python python-devel PyXML openssl-devel net-snmp-devel policycoreutils-gui PyQt4 PyQt4-devel dbus-python notify-python sane-backends sane-backends-devel sane-frontends xsane python-imaging python-imaging-devel *crypto*
$ sudo ln -s /lib/libcrypt-2.12.so /lib/libcrypt.so

$ wget http://downloads.sourceforge.net/project/hplip/hplip/3.15.2/hplip-3.15.2.tar.gz
$ tar zxf hplip-3.15.2.tar.gz
$ cd hplip-3.15.2
$ ./configure --with-hpppddir=/usr/share/cups/model/HP --libdir=/usr/lib64 --prefix=/usr --enable-qt4 --disable-libusb01_build --enable-doc-build --enable-cups-ppd-install --disable-foomatic-drv-install --disable-foomatic-ppd-install --disable-hpijs-install --disable-udev_sysfs_rules --disable-policykit --disable-cups-drv-install --enable-hpcups-install --enable-network-build --enable-dbus-build --enable-scan-build --enable-fax-build
$ make -j 4 && sudo make install

$ sudo hp-setup
设置打印机

SSH 隧道

1. 反向隧道

学校关闭了对服务器所有外端口的访问。于是要想在校外登录实验室的服务器,则需要有一台有固定 IP 的外网机器。实验室的服务器能连接上该外网机器,同时来开启一个 ssh 反向隧道,以供外网机器连接到实验室服务器。于是本地机器可以先连接到外网机器,再连接到实验室服务器。
实验室的服务器不需要有固定的 IP,有个用户名为 chenlianfu ;外网服务器的 IP 为 123.123.123.123 ;外网服务器的用户名为 waiwang。

在内网服务器上输入命令,建立一个和外网机器的 ssh 隧道,来保证外网机器能和内网机器进行连接
$ autossh -M 4321 -N -f -R 2222:localhost:22 waiwang@123.123.123.123
输入 123.123.123.123 机器 waiwang 用户的密码来构建反向通道。

-M 推荐加上此参数,可能好些,貌似是发送和接受测试数据用。
-N -f 这两个参数配合使用,让隧道在后台运行。
-R 构建反向隧道,将本地机器的 22 号端口映射成为远程服务器的 2222 端口。

此外,若使用 ssh 也可以运行上述命令,但是容易断掉反向隧道。

在 IP 为 123.123.123.123 的机器上则通过下面命令来连接内网机器:
$ ssh -p 2222 chenlianfu@localhost
输入内网机器 chenlianfu 用户的密码通过反向隧道来连接内网机器。
这时,只需要连接有固定 IP 的外网机器,即可再连接内网服务器。

使用rsync进行数据同步

1. rsync 命令作用

rsync 主要用于同步 2 台机器的文件。这里,同步的意思是:

1. 若目的端文件的源端的文件内容不一致,则使目的端文件和源端的文件内容一致。默认下,程序会比较两端文件的时间戳和大小,如果一致,则不会同步。
2. 默认下,若两端都有的文件,不会修改rwx权限和modify time。
3. 源端的路径必须有读权限,目的端必须有写权限,才能正常同步。

2. rsync 常用命令和参数

常用命令示例:
$ rsync -vrP -e 'ssh -p 22' SRC USER@HOST:DEST
可以使用 rsync 替代 scp。因为 scp 不能断点续传。

常用参数:
-v
    输出日志信息,-vvv (多个v)则会输出更多的信息。
-r
    递归,传输文件夹需要加此参数。
-P
    相当同时使用 --partial(断点续传) --progress(显示传输进度)这2个参数。
-e  default: ssh
    设置传输方式。如果ssh端口是 1234,则需要使用参数 -e 'ssh -p 1234' 。
--delete
    删除在目的端删存在而源端不存在的文件,配合 -r 使用。
-z
    使用gzip压缩后传输。
-t
    将源端文件的modify time同步过去。
-p
    将源端文件的rwx权限同步过去。
-I
    程序会比较文件内容是否一致来进行同步,速度慢。

ssh不提示将ip加入到known_hosts

需要使用ssh连接到指定的主机,然后运行一个命令后退出。但是该主机每次重新联网都会变化IP(PPOE上网).这时每次ssh的连接默认情况下会询问是否将主机ip永远加入到本地的~/.ssh/know_hosts中。

这种情况下则所需要的命令不会运行。比如运行程序:

$ ssh user@ip_address "mplayer ~/musics/audio/alarms/Beeps.mp3"

以上命令的目是主机上的声音。将此命令在远端服务器运行,来播放本地机上的一个提醒铃声。但是本地主机没有固定IP的时候,就不会有提醒。于是进行如下设置:

更改/etc/ssh/ssh_config文件

StrictHostKeyChecking no