对于ssh公密钥认证免密码设置想必基本都比较熟悉不够,详见:SSH Without a Password

但这里想记录的是关于日常使用过程中遇到些小麻烦所延伸的问题,因为通常会设置此认证方式原因莫过于一、安全考虑;二、服务器量多管理操作方便等原因。情况大致是,本地机器local,分别有服务器:s1和s2等等,私钥放在local,公钥分别放在两台服务器,那local登录到两台服务器都可以不再需要密码认证。但s1与s2直接通信的话还是需要输入密码(如果限制了密码方式登录那不是更麻烦了?)

因此通过搜索引擎了解到,可以通过ssh代理转发功能及代理认证解决,其中用到ssh-agent 就是一个管理私钥的代理,受管理的私钥通过 ssh-add 来添加,所有 ssh-agent 的客户端都可以共享使用这些私钥;以及开启代理转发ForwardAgent yes或者ssh -A选项开启。

其实:ssh-agent起到的效果有2点:一、不用每次重复输入密码;二、私钥只需部署于本地同样可在远程服务器下调用。

大致配置操作:

1.vim /etc/ssh/ssh\_config 或~/.ssh/config 修改配置ForwardAgent yes (若没开启需每次连接时使用ssh -A选项进行开启转发代理)
2.启动ssh-agent
3.使用ssh-add将私钥添加到管理私钥的代理---ssh-agent下,
    ssh-add ~/.ssh/id\_rsa #添加
    ssh-add -l   #查看

如此一来,不管s1–>s2还是s2–>s1都可以使用本地的私钥进行验证而无需输入密码。

但是,解决的还不够彻底,在同样情况下的延伸中(所有服务器上都有公钥,从local连入s1,再从s1使用SSH命令连扩s2,再从s2使用SSH命令连入s3)这时候,s3依然要要求输入密码进行验证。其实关于此问题,由刚前面对于ForwardAgent选项的配置便很好理解:即连接端需存在私钥或由上个连接端的私钥代理的转发层层传递下来的,否则连接时需在前个连接时候就使用ssh -A参数临时开启。故解决措施有二:

1.在s1连接s2的时候,ssh命令临时使用附加参数:-A 开启允许转发认证代理的连接,这样s2连接s3或其他(同样道理要想层层皆可那就需循环每每连接时都使用附加参数"-A"选项使得下次连接可用)
2. 直接一次性修改配置文件~/.ssh/config中的ForwardAgent yes发布到各个服务器用户配置目录下。

很显然第二种方法较可取,省得每次连接还得多加”-A”参数。

现在只要服务器已加了公钥且开启了ForwardAgent后,从本地local连接出去后再连接任何一台都通畅方便啊。

以上是所测试本地local系统环境是在Linux(ubuntu11.10)终端下的,对于Win系统环境可以借助私钥管理工具pageant及ssh客户端工具Putty/SecureCRT

 

问题背景:

最近十天来连续两次遇到服务器网络出现“抽风式”故障—公网网络不定时突然自动down掉(如果要说有特别点最多就流量大点 但也并非常啊)无法连接,还好局域网网络正常服务器系统本身服务也没发现异常情况,也没查看到特别异常的log记录,都只能通过局域网服务连接执行service network restart重启网络服务才能恢复正常,觉得实在比较诡异。觉得怀疑会不会网卡有问题,后来同事提醒下进一步觉得应该是网卡驱动兼容性问题。
环境:OS:CentOS5.5 64Bit 网卡:Broadcom Corporation NetXtreme II BCM5709 系统自带的默认驱动bnx2:2.0.2

网上Google了下据说是RH系列相关系统自带的Broadcom NetXtreme II BCM 5709 驱动有BUG 涉及到关于ACPI电源管理的问题。这么一来网上肯定自然也有相应的修复办法(有人提问题最终肯定有答案,而且这有如电视剧里演的有案件最终肯定有结果不然不可能演)。故在自己的地方简单记录再次警惕自己下…

解决措施:

方案一、系统启动内核加载时停用ACPI电源管理系统 修改相应的Grub.conf引导程序配置文件:(此方案个人未曾尝试过 因为毕竟是在线生产环境还是比较担心不靠谱)

vim /boot/grub/grub.conf
title CentOS (2.6.18-194.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 acpi=off #内核引导行最后添加acpi=off关闭
        initrd /initrd-2.6.18-194.el5.img

方案二、去除使用系统自带的网卡驱动,手动安装更新网卡驱动。(最后选择此方案进行修复待后续观察效果…)

1、先确认当前驱动版本:

modinfo bnx2  #或直接ethtool -i eth0 可以查看到固件版本
filename:       /lib/modules/2.6.18-194.el5/kernel/drivers/net/bnx2.ko
version:        2.0.2
license:        GPL
--------------------------------------------------------
ethtool -i eth0
driver: bnx2
version: 2.0.2
firmware-version: bc 4.6.4
bus-info: 0000:01:00.0

2、下载最新网卡驱动:http://www.broadcom.com/support/ethernet_nic/netxtremeii.php

3、安装更新驱动:

unzip linux-6.0.53.zip #解压驱动程序其中已包括源代码及rpm包
cd Server/Linxu/Driver
rpm -ivh netxtreme2-6.0.53-1.src.rpm #解压出包源码
   1:netxtreme2             ########################################### [100%]
cd /usr/src/redhat/SPECS/
rpmbuild -bb netxtreme2.spec #重建生产对应系统的rpm包
cd ../RPMS/x86_64/
rpm -ivh netxtreme2-6.0.53-1.x86_64.rpm #安装网卡驱动

4、网卡驱动切换:

vim change_driver.sh
rmmod bnx2
modprobe bnx2
chmod 755 change_driver.sh
./change_driver.sh & #后台执行脚本
注:正常情况网络会出现中断一会重新加载完成会自动恢复,如果出现异常未能自动恢复可能需要重启服务器使系统完成重新加载新网卡驱动

5、核实更新后当前驱动版本:

modinfo bnx2 #或直接ethtool -i eth0 可以查看到固件版本
filename:       /lib/modules/2.6.18-194.el5/updates/bnx2.ko
version:        2.0.18c
license:        GPL
---------------------------------------------------------
ethtool -i eth0
driver: bnx2
version: 2.0.18c
firmware-version: bc 4.6.4
bus-info: 0000:01:00.0

至此,能做基本处理,对于自身环境后续就是还有待再继续观察验证是否是此问题,不定时问题是否还依旧。就比如同事后来置疑到固件版本还是没升级上来,还是4.6.4担心还会有问题。但因为对此情况网上貌似有人测试过单单升级固件版本还是不见效果(来源见参考链接2),故还是先更新驱动看看,真还是依旧有问题的话再找其他招数咯

参考链接:
http://www.ourlinux.net/2009/11/25/1136.html
http://www.bugx.org/136

 

Sphinx:http://www.sphinxsearch.com/
Coreseek:http://www.coreseek.com/

一、简介:

Coreseek是基于sphinx更完善支持中文搜索功能。故其原理同sphinx,如下:

1、sphinx的两个主要进程indexer和searchd。
indexer任务是从数据库(或者其他的数据源)收集原始的数据,然后建立相应的索引。
searchd则是通过读取indexer建立的索引来响应客户端的请求。

2、sphinx工作前提:配置文件修改
a、需要让其获取数据源从何而来(即:配置source信息)
b、建立索引,对数据源的哪部分数据进行索引等详细信息(即:indexer的所有信息)
c、执行indexer生产索引,最用才启用searchd服务

3、应用主要是通过api接口实现,支持php、perl、python及ruby等语言调用。

二、系统环境:

最好使用中文环境utf8
locale查看
修改/etc/profile 文件添加 export LC_ALL=zh.CN-UTF8

确认autoconf、automake安装可执行下
autoconf
automake

三、软件编译:

wget -c http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.13.tar.gz
tar zxvf coreseek-3.2.13.tar.gz
cd coreseek-3.2.13/mmseg-3.2.13
./configure --prefix=/usr/local/mmseg
make && make install

##中文分词测试,如果显示不正常,请检查当前环境下的locale和UTF-8中文字符显示设置

/usr/local/mmseg/bin/mmseg -d /usr/local/mmseg/etc src/t1.txt

根据需要编译:

#只支持xml源数据源
./configure --prefix=/usr/local/coreseek --without-python --without-mysql --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install
#执行测试
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx-min.conf.dist
#支持Mysql数据源
./configure --prefix=/usr/local/coreseek --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include/mysql/ --with-mysql-libs=/usr/local/mysql/lib/mysql/
make && make install

可能遇到问题处理:

1、提示config.status: error: cannot find input file: src/Makefile.in
执行以下命令

aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean

注:个人只运行下autoconf及automake即通过

2、Linux环境下,如遇到pthread问题,请先直接执行以下指令在进行configure前:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH

3、如果出现undefined reference to `libiconv’的类似错误,可以按照如下方法处理:
方法一:(Linux使用)
直接执行:export LIBS=”-liconv”
然后再次configure后,进行编译安装
方法二:
首先configure,然后vim src/makefile
在其中搜索lexpat,在其后加上 -liconv
修改后该行应该为:-lexpat -liconv -L/usr/local/lib
然后再次make
方法三:
#首先configure,然后vim config/config.h
在其中搜索USE_LIBICONV,将其后的1修改为0
然后再次make

四、文件配置:(/usr/local/coreseek/etc/csft.conf)

a、数据源(这里以mysql数据为例 也可支持xml方式)

source sphinx
{
sql_host = 192.168.1.100   # mysql服务器ip
sql_user = sphinx	    # mysql用户名
sql_pass = sphinx	    # mysql密码
sql_db = sphinx	    # mysql数据库名
type = mysql		    # 数据源类型
sql_port= 3306		    # optional, default is 3306
sql_query_pre= SET SESSION query_cache_type=OFF
sql_query_pre= SET NAMES utf8;
sql_query = SELECT * FROM documents WHERE id=$id	# 具体数据列
}

b、索引任务:

index sphinx_test
{
source   = sphinx
path   = /usr/local/coreseek/var/data/sphinx
docinfo   = extern
mlock   = 0
morphology   = none
stopwords   =
min_word_len  = 1
charset_type  = utf-8
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
ngram_len    = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
min_prefix_len  = 0
min_infix_len  = 1
}

c、搜索服务配置(基本保持默认即可)

searchd
{
port                            = 9312
log                             = /usr/local/coreseek/var/log/searchd.log
query_log                       = /usr/local/coreseek/var/log/query.log
read_timeout                    = 5
max_children                    = 30
pid_file                        = /usr/local/coreseek/var/log/searchd.pid
max_matches                     = 3000
seamless_rotate                 = 1
preopen_indexes                 = 0
unlink_old                      = 1
}

五、服务启动:

执行indexer生成索引:

/usr/local/coreseek/bin/indexer --rotate sphinx_test  #只对sphinx_test索引任务
或
/usr/local/coreseek/bin/indexer --all --rotate  # 针对所有索引任务

可能会出现数据库连接失败错误:

/usr/local/coreseek/bin/indexer sphinx_test --rotate
/usr/local/coreseek/bin/indexer: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory
#先确认下libmysqlclient.so.15是否存在
ldd /usr/local/coreseek/bin/indexer
libmysqlclient.so.15 => not found

解决措施:

vim /etc/ld.so.conf
/usr/local/mysql/lib/mysql/ #最后一行添加
[root@localhost etc]# ldconfig

运行搜索服务searchd:

/usr/local/coreseek/bin/searchd &

六、应用:

API接口程序调用

© 2011 Yousri's Blog Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量