Posts Tagged “Linux”

6月记录的《centos 5.6配置笔记》,现在翻出来看,实在太简洁了,以至于今天重新更改centos的配置,让我花了不少时间重新学习。
0. 因为原来的nginx与php连接程序spawn-fcgi程序不断的自动退出,今天决定改用php-fpm(即php-cgi)程序。
1. 因为yum的默认源、epel和rpmforge源中都没有php-fpm包,参考http://www.itkee.com/os/detail-802.html,在/etc/yum.repos.d/目录下添加[CentALT]源,这个源添加之后引发了相当多的后续问题……
2. 原来的源中,php52有一系列程序,安装新的源之后,默认php程序版本就是5.2.17,要安装其他相关程序,比如php-fpm则必须卸载之前一系列的php52程序,卸载和重装很快,但是更新和修改配置文件很麻烦。
3. 关闭yum-updatesd自启动进程,使用chkconfig yum-updatesd off命令设置默认不启动该程序。这个程序的作用主要是自动升级yum,但是有一系列问题。
4. 因为步骤2,同时卸载了phpMyAdminwordpress程序,重新安装最新版。wordpress下载最新版本解压,默认路径/usr/share/wordpress,用原先配置文件覆盖之后,一切正常。而phpmyadmin就没这么好运了,使用yum安装,一直无法登陆,又改下载最新版本解压,默认路径/usr/share/phpMyAdmin,依然无法登陆。修改了很多配置文件,修改了程序安装目录的属性。最后参考http://blog.fend.cn/archives/50.html,找到/etc/php.ini文件中session.save_path中的设置目录/var/lib/php/session/,修改该目录访问权限为777,才正常登录phpMyAdmin。这个破问题浪费了我一下午时间!

Comments 2 Comments »

0. 添加private key,每次登陆不需要再输入密码; 添加个人用户,准备禁用root远程登录; 在个人用户下面用ssh-keygen生产新的key pair,ssh以root登录快速切换用户
1. 添加epel源,有两个方法,可以直接修改/etc/yum.repos.d/目录下的repo文件,也可以使用rpm安装更新,推荐后者,rpm安装后会直接导入需要的key
2. 卸载httpd,安装nginx 1.0.4,通过下载rpm安装,用chkconfig设置默认启动方式
3. 配置防火墙(iptables), 可以使用iptables add和iptables save命令,也可以直接修改/etc/sysconfig/iptables文件
对于http(80端口)服务添加如下规则:

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

4. 更新php版本,通过yum安装php52相关程序(据说php5.3兼容性不好,暂不更新),参考site5的服务器配置,与site5保持同步更新状态,安装php52-mysql的连接程序
5. 尝试更新mysql版本(默认5.0.77),通过yum更新mysql50相关程序更新mysql到5.0.92,发现兼容有问题(phpMyAdmin无法监测到mcrypt插件),恢复默认版本.

mysqli
MysqlI Support enabled
Client API library version 5.0.92
Client API header version 5.0.77

中途出现另一个问题,发现mysql无法启动,原因是删除mysql50程序的同时删除了mysql用户,重新安装mysql时uid和gid发生变化,导致mysql无法访问对应目录,需要使用chown修改目录所属用户
6. 安装phpMyAdmin,根据需要安装3.4.2版,首先遇到mcrypt插件无法使用的问题,通过恢复原始版本mysql解决,之后发现用户无法登陆,且没有任何提示,上网搜索发现类似问题,参考此处解决,依然是目录所属用户不对造成的问题.
7. 安装openvpn, todo:配置和测试
8. 用yum安装了wordpress3.1.2,用mysql命令添加数据库,设置mysql用户权限,配置wordpress的配置文件/etc/wordpress/wp-config.php,在/usr/share/wordpress中建立符号链接。通过wordpress管理界面更新时出错,需要将/usr/share/wordpress目录所有者设置为http服务器(也有说php程序,此处连接nginx的程序为fcgi)运行者,在这个系统中为nginx用户。修改用户之后依然更新出错,检查无果,最后我猜测是第一次更新损坏了旧版wordpress系统,重新覆盖3.1.2版本之后尝试更新,成功。
9. 疑难杂症:putty中设置keep alive之后,依然不停的断开连接,不知是否服务器有设置,或者与目前使用root用户相关

Comments 4 Comments »

昨天在windows下面是用预先编译的exe程序给古仁拉相册中的相片添加gps信息,发现只有几张照片能匹配,其他都无效,很是奇怪。在linux下面用windows下面生成的gpx文件重新匹配,仍然失败。今天检查gpx文件和已经匹配的照片信息,发现了问题所在。gpx中有6段ozi文件,每段是按照时间倒序排列的,手动修正时间顺序之后,重新匹配一切正常(最后5张照片由于gps没电没有轨迹,所以未能匹配)。

归根结底说来,是windows下面的cat程序造成的问题,按照倒序把所有文件内容迭加到一起(linux下默认是顺序)。导致gpsbabel生成了错误规格的gpx文件,但是如果gpsbabel更”聪明“一点,也许就不会出现这样的问题了。

Comments No Comments »

找到个很多很多电子书的网站:百灵书库,多数是扫描的pdf格式,下载需要注册。

有两点不方便,第一是搜索,很不好用,第二是下载,一次只能下一个,每本书都被存成很多个乱序文件名的rar,既费时间,又不方便解压。这两天用了一下,想了两个办法可以解决部分问题。

搜索:可以在google里面输入xxx site:beelink.com.cn在google的帮助下在网站里面找东东。

下载受服务器限制没办法,但是下载的n个rar格式的文件乱序,可以用写个脚本改名,然后一次性解压就方便多了,要注意的是下载的时候按照先后顺序点击下载,因为乱序的文件无法根据文件名排序,只能根据修改时间排序。以下脚本可以在cygwin中执行。

#/bin/sh
j=0
for i in `ls -1tr *.rar`
do
mv $i $j”.rar”
j=`expr $j + 1`
done

btw:shell定义变量不能有空格,老是忘记……

书籍下载

Comments No Comments »

在tomcat启动脚本中添加如下命令:

1. 解决display问题:
export CATALINA_OPTS=-Djava.awt.headless=true

2. 解决中文问题:
export LANG=zh_CN
export LC_CTYPE=zh_CN

#这句话不清楚干什么的, 照抄留着备用
stty pass8

好久以前搞得了, 最近没试过, 大概如此吧. 下次确认了再来comment

Comments No Comments »

例三:建立socks代理服务
B#ssh -f -N -g -D 8888 localhost -l root
此时相当于在B的机器上建立了一个socks4代理,端口为8888。此时如果C要访问A,也可以在通过设置socks4代理,通过B的9999端口访问A。
C#ssh -p 9999 localhost -l user
注意,如果改localhost为127.0.0.1,则将访问C自身地址。在这种情况下locahost与127.0.0.1不同。

例四:从windows下使用putty建立ssh端口转发
假设需要在D上建立Local的端口转发,将本地的7777端口转发到B的22端口,可以做如下设置
Connection->SSH-Tunnels中可以设置putty的端口转发,Source port为listen_port,填7777,Destionation为DST_Host:DST_port,填写218.104.xxx.xxx:22,putty连接的sshd主机为Tunnel_Host,设置完了点Add,可以在Forwarded ports:中看到类似如下配置:
L7777 218.104.xxx.xxx:22
此时如果从B连接本地7777端口,将连接到B的22端口。
说明:OpenSSH应该也支持端口转发功能,但是没有用过。

ssh port forward暂时总结到这里,其实有了-g参数以后,很多问题迎刃而解,比起我刚开始琢磨的时候,少了很多烦恼。只是在-R的情况下-g不起作用。

Comments No Comments »

举几个例子说一下ssh port forward的应用吧,假设:
A:192.168.1.123,linux,有sshd,httpd服务,没有路由,能通过网关访问外网
B:218.104.xxx.xxx,linux,有sshd,有路由
C:172.16.1.123,linux,有sshd,没有路由,能通过网关访问外网
D:192.168.1.111,windows,没有sshd,没有路由,能通过网关访问外网络
其中:A,D通网断,可以互相访问,与C不在同一网段,不能直接访问。

例一:让B访问A的服务
1) 从A上建立远程端口转发:
A#ssh -f -N -g -R9999:localhost:22 -l root 218.104.xxx.xxx
说明:需要认证root@218.104.xxx.xxx的密码,且9999端口在218.104.xxx.xxx未被占用,一旦命令执行成功,在B上运行netstat -an |grep 9999可以看到该端口正在监听。如果不用root,只能创建1024以上的端口监听。
2) 从B上连接A的sshd端口:
B#ssh -p 9999 -l user localhost
说明:B–ssh–>B:9999–>B–ssh–>A:22此时用户从B上即可连接到A的sshd端口,实现了vpn的功能。但是如果用户从B以外仍然无法访问A,即使在B上用ssh -p 9999 -l user 218.104.xxx.xxx都无法登陆。
问题:-g参数本来是允许远程机器访问转发端口的,但是实际使用中似乎不起作用。当不使用-g时,用netstat -na看到的端口监听是ServerName:listen_port的形式,使用-g参数之后看到的情况是*:listen_port的形式(-L,-D时如此,-R无效)。如果要让B以外的机器也能访问A,即能访问B的9999端口,可以在/etc/ssh/sshd_config中加入下面一行:
GatewayPorts Yes
或者用我们后面介绍的方法。

例二:让C访问A的服务,理论上说有两个途径
方法一:在B上建立本地端口转发到自身,并且使用-g参数,允许远程主机访问
B#ssh -f -N -g -L7777:loaclhost:9999 -l root localhost
如果-g起作用(实际尝试中,在有些机器中成功,有些失败,但是端口确实是在监听所有地址,即*:listen_port),则:
C#ssh -p 7777 218.104.xxx.xxx -l user
将能连接到A的sshd服务
C–ssh–>B:7777–ssh–>B->localhost(B):9999–>B–ssh–>A:22
方法二:在C上通过B建立本地端口转发到localhost(B),因为B上可以访问自身9999端口,即可访问到A
C#ssh -f -N -g -L6666:localhost:9999 -l root 218.104.xxx.xxx
C#ssh -p 6666 -l user localhost
C–>localhost(C):6666–ssh–>B–>localhost(B):9999–>B–ssh–>A:22

先到这里,下次介绍-D的作用吧。实践的OS是redhat enterprise 3,由于家里没有试验环境,所以麻烦比较多。

Comments No Comments »

ssh的三个强大的端口转发命令:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port -l user Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port -l user Tunnel_Host
ssh -C -f -N -g -D listen_port -l user Tunnel_Host

I) 先看看linux下面ssh命令的相关帮助:
# ssh -help
……
-l user Log in using this user name.
用来登录sshd服务器的用户名,相当于user@remote-host。
-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-p port Connect to this port. Server must be on the same port.
被登录的ssd服务器的sshd服务端口。
-L listen-port:host:port Forward local port to remote address
在本地创建监听端口,一旦有连接建立到该端口,就转发到host:port。
-R listen-port:host:port Forward remote port to local address
在远程创建监听端口,一旦有连接建立到该端口,就转发到host:port。
These cause ssh to listen for connections on a port, and
forward them to the other side by connecting to host:port.
-D port Enable dynamic application-level port forwarding.
在本地建立监听端口,一旦有连接建立到该端口,动态转发,相当于创建了socks代理服务器。
-C Enable compression.
压缩数据传输。
-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用,参见III)
……

II) 参见:http://cmpp.linuxforum.net/cman-html/man1/ssh.1.html
-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-D port
指定一个本地机器 “动态的” 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

III) ssh port forward相关配置
一般sshd配置文件路径为/etc/ssh/sshd_config
添加一行:
GatewayPorts Yes
则允许远程主机连接到转发端口,相当于-g

最后是我的理解:
Localhost–>Localhost:listen_port–ssh(encrypt)–>Tunnel_Host–(unencrypt)–>DST_Host:DST_port
Tunnel_Host–>Tunnel_Host:listen_port–ssh(encrypt)–>DST_Host:DST_port
Localhost–>Localhost:listen_port–ssh(encrypt)–>Tunnel_Host–(unencrypt)–>AnyHost:Any_port

Comments No Comments »

A very good article about ssh port forward, the original url is:http://staff.washington.edu/corey/fw/ssh-port-forwarding.html
I’ll give detail explainations in Chinese later.
And the article I upload to my own spalce, the link url is:http://ttrek.net/download/tech/ssh-port-forwarding.html

Comments 2 Comments »

Section 0 – Everything
Section 1 – User Commands
Section 2 – System Calls
Section 3 – Standard Library Calls
Section 4 – Special Files
Section 5 – File Formats and Conversions
Section 6 – Games for Linux
Section 7 – Macro Packages and Conventions
Section 8 – System Management Commands
Section 9 – Kernel Routines

Comments No Comments »