风之语

posts(201) comments(182) trackbacks(1)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • ajax(1)
  • android(1)
  • apache(1)
  • AppFuse(1)
  • BIRT(1)
  • iText(1)
  • JSF(8)
  • kettle(1)
  • linux(5)
  • mac(1)
  • maven(1)
  • MSTR(3)
  • Open XML(1)
  • Oracle(21)
  • RCP
  • Struts(2)
  • Struts2(2)
  • SybaseIQ(6)
  • tapestry
  • tomcat(2)
  • weblogic(1)
  • webservice(1)
  • weka(1)
  • 云计算(1)
  • 收藏(31)
  • 数据仓库(11)
  • 架构设计(3)
  • 生活(2)
  • 集群(1)
  • 项目管理(6)

随笔档案

  • 2012年12月 (4)
  • 2012年11月 (1)
  • 2012年7月 (2)
  • 2011年8月 (1)
  • 2011年7月 (1)
  • 2011年3月 (1)
  • 2010年12月 (2)
  • 2010年11月 (4)
  • 2010年10月 (3)
  • 2010年9月 (5)
  • 2010年8月 (1)
  • 2010年7月 (4)
  • 2010年3月 (1)
  • 2010年2月 (3)
  • 2009年12月 (3)
  • 2009年11月 (4)
  • 2009年9月 (3)
  • 2009年6月 (5)
  • 2009年5月 (3)
  • 2009年4月 (2)
  • 2009年3月 (5)
  • 2009年2月 (4)
  • 2009年1月 (2)
  • 2008年11月 (2)
  • 2008年9月 (1)
  • 2008年7月 (2)
  • 2008年6月 (4)
  • 2008年5月 (6)
  • 2008年4月 (1)
  • 2008年3月 (1)
  • 2007年12月 (2)
  • 2007年11月 (5)
  • 2007年10月 (2)
  • 2007年9月 (3)
  • 2007年8月 (3)
  • 2007年4月 (1)
  • 2007年3月 (2)
  • 2007年2月 (2)
  • 2007年1月 (2)
  • 2006年12月 (3)
  • 2006年8月 (2)
  • 2006年7月 (2)
  • 2006年6月 (2)
  • 2006年4月 (2)
  • 2006年3月 (1)
  • 2006年2月 (3)
  • 2006年1月 (6)
  • 2005年12月 (6)
  • 2005年11月 (4)
  • 2005年10月 (17)
  • 2005年9月 (25)
  • 2005年8月 (16)
  • 2005年7月 (8)

相册

  • 技术图片

收藏夹

  • java

link

My wife

  • My wife's blog

最新随笔

  • 1. apache修改最大连接并用ab网站压力测试
  • 2. Vm虚拟机访问本地硬盘文件
  • 3. NFS文件无法写入的权限问题
  • 4. weblogic设置上传文件访问权限
  • 5. 在android上动态实现ichartjs的3D柱形图
  • 6. 使用Oracle trunc 来指定精确的年月日时分秒
  • 7. Quartz 2.1.5 web应用配置
  • 8. LoginAny 使用笔记
  • 9. MyEclipse 无响应的几种解决办法
  • 10. java.sql.SQLException: No more data to read from socket

搜索

  •  

积分与排名

  • 积分 - 402378
  • 排名 - 139

最新评论

  • 1. re: 使用Oracle trunc 来指定精确的年月日时分秒[未登录]
  • 政治
  • --张三
  • 2. re: 干掉流氓软件vrvrf_c.exe,vrvedp_m.exe[未登录]
  • `
  • --1
  • 3. re: 无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
  • 我走到了换DMG映像的时候,然后就没有反应了,这个是什么情况,是不是我的映像文件有问题,还是。。。。
  • --玉竹常青
  • 4. re: LoginAny 使用笔记
  • 怎么没一个人留言,现在来是不是在挖坟啊
  • --ellipse
  • 5. MSTR web应用的部署[未登录]
  • 请问,如何用oracle Application Server服务器部署mstr web应用?
  • --rocky

阅读排行榜

评论排行榜

javamail总结经验(一)

环境配置。为了运行javamail。我们需要在classpath里导入两个包:mail.jar和activation.jar,这是在纯DOS里或者其它简单工具使用时才需要这个classpath。如果使用像eclipes这样的工具就不需要配置。因为myeclipes已经帮你做好了。
为了要发送邮件和接收邮件,我们必须要遵守smtp和pop3协议,不过还有其它协议也可执行(如IMAP)。如果把本机当作服务器来发送邮件请在http://jakrata.apache.org网站里下载james邮件服务器,然后解压在本机上。运行james/bin里的run.bat就可以启动了服务器。
运行后在DOS里登录邮件服务器。具体命令如下:
系统管理员:root
密码:root
telnet localhost 4555
然后就可以增加邮箱用户名了。命令如下:
adduser 用户名 密码
例:adduser test test
这样就建立了这样一个邮箱test@localhost 密码为:test 
如果想要更多功能用help命令
注意:如果在本机装了邮件服务器的话,只能在本机局域网里申请邮箱,发送和接收。不能发送到外部的邮箱里去。如果用外部的邮件服务器像比如163和126的服务器等就可以随心所欲的发邮件了。哈哈是不是很爽呢?
先看看用james邮件服务器在本机上发邮件吧。先简单看一个例子。
import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
public class MyFirstMail 
{
    protected Session mailSession;
    public MyFirstMail()throws Exception
    {
        init();
    }
    public static void main(String[] args) 
    {
        try
        {
            new MyFirstMail().sendMail();
            System.out.print("邮件已发");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
//初始化服务器环境
    public void init()throws Exception
    {
        Properties props=new Properties();
        props.put("mail.transport.protocol","smtp");
        props.put("mail.smtp.host","localhost");
        props.put("mail.smtp.port","25");
        mailSession=Session.getDefaultInstance(props, null);;
    }
    public void sendMail()throws Exception
    {
        try
        {
            
//从哪里发的邮件            
msg.setFrom(new InternetAddress("test@localhost"));
    //发送到目标邮件        msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("wang@localhost"));
    //抄送的接收者        msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse("wang@localhost"));
//暗送的接收者
msg.setRecipients(Message.RecipientType.BCC,InternetAddress.parse("wang@localhost"));
//设置发送时间
msg.setSentDate(new java.util.Date());
//设置邮件标题
msg.setSubject("a test mail");
//设置邮件内容
msg.setText("this is the email content");
//指定协议发送消息的对像
Transport transport=mailSession.getTransport("smtp");
//发送消息
Transport.send(msg);
}
catch(Exception e)
{
throw e;
}
}
发送完后想要看邮件就要到james->apps->james->var->mail->inboxes就可以看见每个邮箱里的邮件数了。由于发过来的是字节流,邮件包括一个邮件属性和消息,所以每一封邮件是由二个文件组成的。
            
也许没有学过的javamail的人看上去会一头雾水。不要紧,现在一一详解。先说初始化的内容的吧!
1、    mail.transport.protocol=smtp 这里主要说明的是邮件传输协议。
2、    mail.smtp.host=localhost 发送邮件的主机如果用外部邮件服务器的话,可以这样写
mail.smtp.host=smtp.163.com这样就以163.为服务器了。
3、mail.smtp.prot=25    smtp端口可以省略,缺省为25

javax.mail.session
session类定义了与远程邮件系统通信的邮件会话。需要注意的是这个session不同servlet中的会话。Servlet中的会话需要共享一些信息,而mail里的session里没有这个功能,它只是用于存储与服务器建立连接会话相关信息和逻辑。Session类是javamail api最高层入口类,所有其它类都必须经由session对象生效。Session对象它管理配置选项和用于与邮件系统交互的用认证信息息。它通过使用java.util.properties对象配置邮件会话的属性如邮件服务器,用户名,密码,及整个应用程序中共享的其它信息。
Session并不处现任何授权操作,它只是存储这些授权信息。Session类的构造器是私有的,它不能被继承,也不能用new语名创建实例。但它提供了两个静态方法getInstance 和getDefaultInstance来获取session实例,在创建session实例时需要提供一些属性。具体实现如下:
    Properties props=new Properties()
    Props.put(“mail.transport.protocol”,”smtp”)
    Props.put(“mail.smtp.host”,”localhost”);
  Props.put(“mail.smtp.prot”,”25”)
//不加以认证也可以这样写
//Session session=Session.getDefaultInstance(props,null)
//如果认证传入null那么它和不使用认证调用方式一样 
 Session session=Session.getDefaultInstance(props)
Javax.mail. Message
经过session配置后就可以进行发送消息任务了。这由Message类来完成。Message实现了Part接口,它表示一个邮件消息,包含一系列的属性和一个消息内容。消息属性包括了消息址址消息,定义了消息内容的结构(包括内容类型),消息内容使用DataHandler对象包装实际数据。当邮件消息位于目录(folder)中时,系统还使用了一个标志位集合来描述它的状态。
Message是抽象类,实际使用时必须用一个子类代替以表示具体的邮件格式。比如说javamail api提供了MimeMessage类,该类扩展了Message,实现了RFC822和MIME标准。有两个构造方法:
//一般使用第一种
    Message msg=new MimeMessage(Session session)
Message msg=new MimeMessage(MimeMessage msg)
获得消息后,就可以设置消息各个部份了。在设置之前因为要涉及地址。所以讲一下地址类
javax.mail.Address
Address类表示电子邮件类,它是一个抽象类,它的子类InternetAddress提供具体实现且通常可串行化。若创建的地址只包含电子邮件,只要传递电子邮件到构造器即可如
InternetAddress addr=new InternetAddress();
addr.setAddress(“wang@126.com”)
或者是:InterntAddress addr=new InternetAddress(“wang@126.com”)
另外,InternetAddress类还提供了地址解析方法如
Address[] addrs=InternetAddress.parse(“wang@163.com,f@126.com,zuo@126.com”);
地址之后就可以发送消息了。
//设置发送者
Msg.setFrom(new InternetAddress(“test@126.com”));
//设置接收者,并还具有解析功能
Msg.setRecipients(Message.RecipientType.To,InternetAddress.parse(“zuolin0806@163.com”));
//抄送的接收者
Msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(“zuolin0806@163.com”));
//暗送的接收者
Msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(“zuolin0806@163.com”));
//设置消息主题
 msg.setSubject(“我的爱”)
//设置内容的基本机制,其参数Mime类型
 msg.setContent(“这是我的内容”,”text/html;charset=gb2312”)
其中的text/html表示消息内容采用的是HTML格式。如果消息格式是(text/plain),而且使用的是MimeMessage,那么setText()方法设置邮件内容的参数(Mime类型默认为text/plain)
//设置邮件内容
msg.setText();
//设置发送时间
msg.setSentDate(new java.util.Date());
最后一步是就是发送了
javax.mail.Transport
该类也是抽象类,它可通过静态方法和实便方法发送消息。Transport断承service类。所以它提供了通用方法,如命名传输,连接服务器和监听传输事件等。
//默认
Transport.send(msg);

最后看一下使用外部邮件服务器的使用方法。先看程序再讲解,注意在使用外部邮件服务器时一定要有一个类来认证。到时在讲。
public class MySecondMail
{
protected Session session = null;
//邮件用户名
    String mailUser = "zuolin0806";
    String host = "smtp.163.com";
    String pwd = "用户名的密码";
    public MySecondMail()
    {
        init();
    }

    public void init()
    {
        Properties props = new Properties();
        props.put("mail.transpost.protocol", "smtp");
        props.put("mail.smtp.host", "smtp.163.com");
        //必须要有一个类来认证
props.put("mail.smtp.auth", "true");
props.put("mail.smpt.port", "25")
Email_Autherticatorbean auth =  new Email_Autherticatorbean(mailUser,pwd);
        //session认证
session = Session.getInstance(props,auth);
        //这个是跟踪后台消息。打印在控制台
session.setDebug(true);
   }
    public static void main(String[] args)
    {
        new MySecondMail().sendMails();
        System.out.println("send mail success!");
    }
    public void sendMails()
    {
        try
        {
            Message msg = new MimeMessage(session);
         msg.setFrom(new InternetAddress("zuolin0806@163.com"));
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("javaboy@126.com"));
       msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse("javaboy@126.com"));
      msg.setSentDate(new Date());
      msg.setSubject("this is my Threee mail");
      msg.setContent("this is my mail","text/html");
      msg.setText("我成功了。哈哈");

     Transport transport = session.getTransport("smtp");
      与发送者的邮箱相连
transport.connect(host,mailUser,pwd);
      transport.send(msg);
        }
        catch (SendFailedException e)
        {
            e.printStackTrace();
        }
        catch (Exception ee)
        {
            ee.printStackTrace();
        }

    }
}

认证类必须继承Authenticator  例子如下:
import javax.mail.*;
public class Email_Autherticatorbean extends Authenticator
{
    private String m_username = null;
    private String m_userpass = null;
    public void setUsername(String username)
    {
        m_username = username;
    }
    public void setUserpass(String userpass)
    {
        m_userpass = userpass;
    }
    public Email_Autherticatorbean(String username, String userpass)
    {
        super();
        setUsername(username);
        setUserpass(userpass);
    }
    public PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication(m_username,m_userpass);
    }
}
经过成功发送邮件后是不是有点成就感呢!但还有很多疑问比如怎么读邮件呢?看了下面章节你就会知道了

posted @ 2005-10-15 13:57 风 阅读(2344) | 评论 (1) | 编辑 收藏

利用MyEclipse JSF开发实战(一)

JSF开发实战(一)


    JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的一个实现。也许你也和我一样,在jsf和tapestry之间犹豫很久,将来从apache的态度上应该可以看出二者的走向。在tss上有一篇比较jsf 1.0与tapestry 3.0的文章,内容很扎实到位:http://www.theserverside.com/articles/article.tss?l=JSFTapestry
JSF的竞争对手不是struts/webwork之流,它们基本上已经是不同阶段上的东西了,放在一起比较意义不大。

    JSF的开发流程和asp.net中所倡导的code behind方式很相似,核心是事件驱动,组件和标签的封装程度非常高,很多典型应用已经不需要开发者去处理http。页面操作会被自动映射到对应的java bean中,后台逻辑只需要同java bean发生交互。整个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的方式,导致开发工作和以前的jsp/struts等都有非常大的不同,需要一定的时间去学习。学习之前建议先对依赖注入有比较清楚的认识,可以参考我的learn Spring in spring系列的第一篇。

    本系列将以两个例子来讲解jsf的基本开发,第一个例子当然是hello world。目前可用的jsf ide不多,ibm要到06年才能放出支持jsf的wtp版本。所以我们的例子基本以手写为主,这样也能让我们有更清楚的认识,同时推荐目前最好的jsf开发工具:myeclipse 4.0 GA。后面的例子将会有jsf和hibernate的内容,它都能给予很好的支持。由于myeclipse并不免费,所以我们除了讲解在ide中如何操作外,还会叙述手动操作的具体内容,以免过于依赖开发工具。用什么服务器都可以,这里采用了jboss 4.0.2。如果你的服务器是高版本的tomcat(5.5+),那么必须要删除它自带的一些包才能很好的支持jsf,具体细节请查看它的文档。

    请自行下载jsf ri和JSTL 1.1。

废话少说,开始了。

    在myeclipse 4.0GA中新建一个web项目,命名为hello,为项目增加对JSTL的支持:


 
在JSTL的版本中选择1.1。
该操作实际上是把jstl.jar和standard.jar加到工程中。

采用类似的操作为项目添加对jsf的支持:myeclipse?add jsf capabilities
如图:
 


其中的jsf implementation是选择使用哪中JSF实现,我们采用的是sun的jsf ri
JSF config path是配置文件的位置,保持不变
URL pattern是jsf servlet的映射方式,有两种选择,具体细节后面说明。
以上操作上是为项目加入了jsf需要的jar和tld文件,并且创建了一个faces-config.xml的配置文件。涉及到的jar有:commons-beanutils.jar    commons-collections.jar        commons-digester.jar    commons-logging.jar    jsf-api.jar        jsf-impl.jar
涉及到了jsf中所有的tld文件。

当前的faces-config.xml文件的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>

</faces-config>

环境已经建立好了,现在我们要建立一个程序,它的功能是让用户在表单中输入名字,提交后系统会返回一个问候。使用jsf的以后好处是,开发人员会很自然的把mvc各层分开,不会像使用strtus那样别扭,这一点在后面的开发中感觉得到。

首先开发model层,它是个很简单的bean:
package org.bromon.jsf.model.hello;

public class SayHello {
    public String say(String name)
    {
        return "你好,"+name;
    }
}

在model层中你可以随意的实现业务的数据逻辑,不需要与web层有任何的关系。

下面开发控制层,它负责存取web层的数据,并且调用model层的逻辑:
/**
 * jsf的控制层方法
 * @author bromon
 */
package org.bromon.jsf.control.hello;

import org.bromon.jsf.model.hello.*;

public class HelloDelegater {
    
    //------属性---------
    private String name;//表单中的文本框数据会传到这里
    private String result;//web页会从这里取得运行结果
    private SayHello sayHello;//model层的对象,并不事例化,由系统注入
    
    //-----set/get--------
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public SayHello getSayHello() {
        return sayHello;
    }
    public void setSayHello(SayHello sayHello) {
        this.sayHello = sayHello;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    
    //-----逻辑方法---------
    public String say()
    {
        this.setResult(sayHello.say(this.getName()));
        return "ok";
    }
}

需要注意的是,属性的名字、set/get方法的名字必须严格按照java bean规范编写,因为它们要被注入依赖时使用。sayHello对象并没有被实例化,它会在运行时由系统注入。

这两个bean当然要在系统中申明,否则无法实现DI。在faces-config.xml文件中添加内容:
<managed-bean>
        <managed-bean-name>SayHello</managed-bean-name>
        <managed-bean-class>
            org.bromon.jsf.model.hello.SayHello
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>HelloDelegater</managed-bean-name>
        <managed-bean-class>
            org.bromon.jsf.control.hello.HelloDelegater
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>sayHello</property-name>
            <value>#{SayHello}</value>
        </managed-property>
    </managed-bean>

    在后一个bean中,它的sayHello属性被指定要在运行时注入一个org.bromon.jsf.model.hello.SayHello的实例。

下面要编写表示层的页面,只有一个index.jsp:
需要引入两个标签库:

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
下面是构造jsf标签:

<body>
    <f:view>
        <h:form>
            <h:panelGrid columns="3">
                <h:outputLabel for="name" value="姓名:"/>
                <h:inputText id="name" value="#{HelloDelegater.name}" required="true"/>
                <h:message for="name"/>
                
                <h:outputLabel value="#{HelloDelegater.result}"/>
            </h:panelGrid>
            <h:panelGroup>
                <h:commandButton action="#{HelloDelegater.say}" value="提交"/>
            </h:panelGroup>
        </h:form>
    </f:view>
  </body>

页面中包含了一个文本框和一个label,他们分别被绑定到了HelloDelegater类的两个属性上,具体的绑定工作有系统通过翻转控制的方式调用对应的set/get方式实现。提交按钮被绑定到了HelloDelegater.say方法,该方法会把计算结果赋给result属性,它会在页面中显示出来。

因为我们在url pattern中选择了*.faces,所以我们应该访问如下地址来查看程序:
http://localhost:8080/hello/index.faces
相应的,如果你选择了/faces/*,那么就应该是:
http://localhost:8080/hello/faces/index.jsp

程序执行结果如下:


 
bromon原创

posted @ 2005-10-15 11:16 风 阅读(10804) | 评论 (9) | 编辑 收藏

架构设计速成

//组件,容器,引擎,框架,平台
设计,无外乎抽象
先看一段接口的使用代码
public class container{
public void excute(Comp c){
c.metod1();
c. metod2 ();
}
}

interface Comp{
public void method1 ();
public void method2 ();
}
class CompImpt{
public void method1 (){
System.out.println(“method1”);
}
public void method2 (){
System.out.println(“method2”);
}
}

这个就是接口的使用,当你把调用接口的类当作是容器,当作是引擎时,当作是框架时,CompImpt就是组件,你就成为了设计师,把调用接口的类当作是平台时,CompImpt就是插件,你就成了架构师

开个玩笑,呵呵!!

posted @ 2005-10-11 20:24 风 阅读(1081) | 评论 (3) | 编辑 收藏

架构设计师的任务是开合

该拆的拆,该合的合
架构设计师的任务是整合拆分

关于“分”架构设计师的目标是:
把代码分开(便于维护)
把计算机的任务分开(便于计算机运行)
把人的任务分开 (给人分任务,便于管理)

分分合合,古人阴阳如此,今人正反如此

万物如此,人生亦是如此

posted @ 2005-10-10 21:52 风 阅读(342) | 评论 (0) | 编辑 收藏

Eclipse Update Site开通

昨天,Eclipse开通了3.1.1的Update Site,并且给出了一个详细的指导:如何用Eclipse Update Manager从3.1升级为3.1.1。 这避免了重新下载整个3.1.1然后再安装。

Update Site提到:
Welcome to the Eclipse Update Site. This site contains feature and plug-in versions for Eclipse project releases, published in the form expected by the Eclipse Update Manager (R3.0). Use the Update Manager's Feature Updates view to open this site (http://update.eclipse.org/updates) to locate new and updated Eclipse project feature versions to download.


Eclipse 3.1.1 Update Site:
http://update.eclipse.org/updates/3.0

posted @ 2005-10-10 21:44 风 阅读(654) | 评论 (0) | 编辑 收藏

小组开发环境搭建:dhcp+apache+ftp+cvs+samba(经典)

小组开发环境搭建:dhcp+apache+ftp+cvs+samba
2004-04-23 15:18 pm
作者:车东 chedong@bigfoot.com
来自:Linux知识宝库
现载:
http://www.douzhe.com/linuxtips/1196.html
地址:无名

  本文主要介绍一些小组开发环境搭建中经常会遇到一些服务器服务设置,这些服务很多都是鉴于大部分的开发客户端仍然是Windows设置的,每个服务都提供了简单的基本配置示范。(2003-01-10 09:22:08) By 风过留枫, 出处:作者: 车东 chedong@bigfoot.com

  作者: 车东 chedong@bigfoot.com

  最后更新:2003-01-08 09:51:53

  版权声明:可以任意转载,转载时请务必标明原始出处和作者信息

  关键词:linux develop environment cvs version contral gnats bug tracking samba dhcpd wget

  内容摘要:本文主要介绍一些小组开发环境搭建中经常会遇到一些服务器服务设置,这些服务很多都是鉴于大部分的开发客户端仍然是Windows设置的,每个服务都提供了简单的基本配置示范。包括:

  IP管理(DHCP):服务器IP地址的管理和解析(结合SAMBA的WINS服务),开发客户端的IP管理; WEB服务(APACHE):文档共享,CVS的WEB界面浏览,论坛工具等;

  FTP服务(FTP):用于文件下载/共享;

  版本控制(CVS):程序源代码和文档的版本控制;

  文件共享(SAMBA):基于NETBIOS的文件共享,方便WINDOWS客户端的访问(比如一些工具的安装等); 数据库服务器(MYSQL):一些应用的后台数据库服务; 备份机制(wget + rsync):备份

  很多设置是缺省按照在bash环境中,在tcsh环境中,有一些设置不太一直。

  服务器规划如下:


主服务器 (Main) 备份服务器(Backup)
__________________ _______________
|APACHE WEB SERVER | | File Backup |
|SAMBA SHARE | | |
|DHCP SERVER | | DHCP Backup |
|CVS SERVER | | MySQL server |
|GNATS SERVER | | |
|PHORUM SERVER | | |
|Database backup | | |
------------------ --------------- 

  硬件准备:至少要2台服务器

  从理论上说,任何系统的崩溃只是时间问题,而且谁也不能保证开发者不犯错误

  解决的办法只有:备份,备份,备份……

  操作系统准备

  FreeBSD或GNU/Liunx,系统安装时,本文的配置主要以在RedHat 8上运行为例。注意:安装时要将“开发工具”大类选上,后面的很多工具都需要使用GCC进行编译,有的应用脚本运行用到了PERL。2台主服务器分别使用IP地址192.168.0.200和192.168.0.201。

  2台机器上都安装的服务:SSH FTP DHCP服务

  SSH: 基本的登陆服务,对于内部分开发来说一般用缺省的就可以了,但是建议将/etc/ssh/sshd_config中的:

  PermitRootLogin yes改成PermitRootLogin no

  FTP:如果是FREEBSD建议用PROFTPD代替:http://www.proftpd.org/

  安装:


  tar zxf proftpd-version.tar.gz
  cd proftpd-version/
   ./configure
   make
   make install

  缺省配置/usr/local/etc/proftpd.conf


  ServerName "ProFTPD"
  ServerType standalone
  DefaultServer on
  AllowOverwrite on
  Port 21
  Umask 022
  #不反相解析登陆机器的域名
  UseReverseDNS off
  MaxInstances 30
  User nobody
  Group nogroup

  DHCP服务:为了更方便的管理在同一个局域网中开发者的IP地址和服务器的IP地址,最好将服务器安排在一定范围内的静态IP内(比如192.168.0.200以上),将(192.168.0.10-200)范围内为开发机客户端提供动态IP。假设我们的主服务器(192.168.0.200)和辅助开发服务器(192.168.0.201)使用静态IP,同时为网段内提供192.168.0.10-200动态IP分配服务。DHCP服务在2台服务器上都安装,一个做主DHCP服务,用于给子网IP池提供70%的IP,另外一台做备份,拥有IP池的30%。在例子中:200负责10-100,201负责110-150。缺省dhcpd没有安装的话,从安装盘上找到DHCP软件包安装或者从http://www.isc.org下载源文件编译即可(安装位置和配置文件可能有所不同)。

  缺省配置:主服务器上


  ddns-update-style none;
  default-lease-time 120000;
  max-lease-time 920000;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.0.255;
  option netbios-name-servers 192.168.0.200;
  option routers 192.168.0.1;
  option domain-name-servers 202.106.196.115,202.96.199.133;
  option domain-name "example.com";

  subnet 192.168.0.0 netmask 255.255.255.0{
  range 192.168.0.10 192.168.0.100;
  }

  说明:

  缺省每个IP租期2天: default-lease-time 120000;

  最长租期: max-lease-time 920000;

  缺省子网掩码:option subnet-mask 255.255.255.0;

  缺省广播地址:option broadcast-address 192.168.0.255;

  让192.168.0.200上的samba服务启用WINS服务:用于内部域名解析:option netbios-name-servers 192.168.0.200;

  缺省网关 option routers 192.168.0.1;

  缺省域名服务器 option domain-name-servers 202.106.196.115,202.96.199.133;

  缺省域名 option domain-name "example.com";


  #一个缺省的子网设置:
  subnet 192.168.0.0 netmask 255.255.255.0{
#为子网动态分配0.10-100的IP
  range 192.168.0.10 192.168.0.100;
  }

  辅DHCP服务器上唯一不同的地方是:为子网动态分配0.110-150的IP,主DHCP和附DHCP服务器的IP池不能相互重叠


  subnet 192.168.0.0 netmask 255.255.255.0{
  range 192.168.0.110 192.168.0.150;
  }

  主服务器上的应用安装:

  SAMBA服务:用于文件的共享和内部WINS解析

  这里只做一个只读共享的简单配置,


  [global]
   #别人会通过"网上邻居"看到WORKGROUP组里的
    linux机器,注释是:My Samba Server
   workgroup = WORKGROUP
  netbios name = linux
   server string = My Samba Server

   #日志设置
   log file = /var/log/samba/%m.log
   max log size = 50

   #安全设置
   security = share

   #用SAMBA的WINS服务支持,并且用/etc/hosts做内部域名解析
   wins support = yes
   name resolve order = hosts lmhosts wins bcast
   dns proxy = yes

 [public]
   #一个共享设置
   comment = Public Stuff
   path = /home/share
   public = yes
   guest ok = yes
   read only = yes
   writable = no
   printable = no

  在这里为了让大家能够在内部使用dev.example.com访问主服务器(192.168.0.200),我用DHCP设置主服务器(192.168.0.200)同时也是是内部的WINS服务器,而在200的SAMBA服务中,启用了WINS支持,并设置WINS用可以利用DNS做NETBIOS名称解析。这样如果DNS读取的是/etc/hosts文件中的设置的话,hosts文件就可以当作WINS域名配置文件了,在/etc/hosts里设置了:


  192.168.0.200 dev.example.com bbs.example.com dev bbs
  192.168.0.201 bak.example.com backup

  后,通过DHCP获得IP的内网客户端就可以直接通过: dev.example.com访问开发服务器了。

  所有的机器名前缀我都使用了缩写:dev, bbs bak之类的,原因是samba的NMBD实际上是NETBIOS名称的解析,名称长度是16个字符(实际是15个)有限制的。因此,虽然192.168.0.202 username.example.com虽然是一个合法的DNS名称解析,但由于username.example.com长度超过了16个字符,所以通过SAMBA的WINS服务解析仍然无法找到。dev.chedong.com相当于dev.chedong.com这样的一台机器。当初用SAMBA的WINS解析在客户端总是ping不通testing.chedong.com这个问题困扰了我好一阵。

  WEB服务:APACHE

  主要用作文件的WEB共享和一些应用的前端浏览(CVSWEB GNATSWEB PHPMYADMIN等),Apache,这里仍然使用了1.3,因为很多应用,比如PHP在2.0上运行还不是完整。

  安装: http://httpd.apache.org下载最新版本:

  编译选项:这样可以让所有的模块都通过配置文件动态加载,方便后面其他应用模块的添加删除: ./configure --prefix=/home/apache --enable-shared=max --enable-module=most 更多安装说明可以参考: APACHE安装笔记

  文档共享技巧:

  1 对于文档的共享来说,autoindex模块非常有用,让APACHE自动索引目录缺省是按文件/目录名排序的,而且文件名40个字符以上部分是被截断的,为了能显示完整的文件名,并且像资源管理器那样将目录排在前面,文件排在后面:

  在模块设置中:


#增加NameWidth选项,并且文件名长度是*(自动适
   #应当前目录下最长文件名)
#增加FoldersFirst选项,让目录列在前面(类似于资源管理器)
#增加了ScanHTMLTitles用HTML文件的TITLE做文件
   #的描述,并设置描述长度是*(自适应最长)
IndexOptions FancyIndexing +NameWidth=*
   FoldersFirst ScanHTMLTitles +DescriptionWidth=*

  2 如果是CGI开发,如何让用户在自己的目录下能够发布CGI程序,比如:http://192.168.0.200/~chedong/cgi-bin/my_cgi:在 模块设置中,添加正则表达式: ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/cgi-bin/$2

  意思是匹配~user_name/cgi-bin/cgi_name自动映射到/home/user_name/cgi-bin/cgi-name脚本

  版本控制:CVS

  CVS缺省在服务器上几乎都安装好了,只要按照以下步骤初始化即可:

  在/etc/profile里:

  CVS库所在的主服务器设置:


  export CVSROOT=/home/cvsroot

  在其他开发服务器里设置:


  export CVSROOT=:ext:$USER@192.168.0.200:/home/cvsroot
  export CVS_RSH=ssh

  然后在主服务器上cvs init初始化:

  关于CVSWEB的设置,重复以下CVS常用命令手册中CVSWEB的内容:

  CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,这个是个人感觉安装设置比较方便的: http://www.spaghetti-code.de/software/linux/cvsweb/

  下载解包:


  tar zxf cvsweb.tgz

  把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一个目录下),

  修改:cvsweb.cgi让CGI找到配置文件:


  $config = $ENV{'CVSWEB_CONFIG'}'
    ''/path/to/apache/conf/cvsweb.conf';

  转到/path/to/apache/conf下并修改cvsweb.conf:

  修改CVSROOT路径设置:


  %CVSROOT = (
'Development' => '/path/to/cvsroot',
  #<==修改指向本地的CVSROOT
  );

  缺省不显示已经删除的文档:

  "hideattic" => "1",#<==缺省不显示已经删除的文档

  在配置文件cvsweb.conf中还可以定制页头的描述信息,你可以修改$long_intro成你需要的文字

  首先可以CVS进库里的就是以上系统的安装文档。

  更多的关于CVS的扩展应用可以参考CVS常用命令手册CVSTRAC部分。

  多个服务之间的资源共享

  一般可以通过链接解决,比如:

  我希望匿名ftp共享的内容(比如在/var/ftp/pub目录下)都可以WEB发布,


  ln -s /var/ftp/pub /home/apache/htdocs/pub

  我希望/usr/share/doc里的文档大家可以通过WEB浏览:


  ln -s /usr/share/doc /home/apache/htdocs/doc

  我希望WEB发布的内容大家通过WINDOWS网络邻居也可以访问:假设/home/share是samba发布的只读共享路径


  ln -s /home/apache/htdocs /home/share

  服务的自动启动:

  系统已经安装的服务一般可以通过setup的服务配置是否自动启动,否则就在/etc/rc.local里加一些启动脚本即可。

  比如:

  备份和日志统计

  可以将以下脚本写在主服务器的ROOT的CRON里:


  #time sync
  0 5 * * 1 (/usr/bin/rdate -s YOUR_DATE_TIME_SERVER)

  #backup gnats
   6 3 * * * (cd /home; tar cf
     /home/backup/gnats.`date +\%w`.tar gnats)

  #backup cvsroot
  5 3 * * * (cd /home; tar cf
    /home/backup/cvsroot.`date +\%w`.tar cvsroot)

  #backup apache
  8 3 * * * (cd /home; tar cf
    /home/backup/apache.`date +\%w`.tar apache)

  #gzip all backup
  50 3 * * * (gzip -f /home/backup/*.tar)

  #webalizer demo
  3 5 * * * (/usr/local/bin/webalizer -c /home/apache/conf/webalizer.conf
    /home/apache/logs/`date -d yesterday +
%w`/access_log)

  #remove last week log
  3 4 * * * (find /home/apache/logs/ -name
    access_log -mtime +6 -exec rm -f {};)

  这样,在/home/backup目录下会有按星期轮训的7个备份。然后通过在辅助服务器上设置CRON用wget的-m选项镜像主服务器上的/home/backup目录或者用rsync做同步就可以了。后面的2条是关于使用webalzier做服务器的日志统计,APACHE的日志通过cronolog进行了轮循。具体设置请参考:

posted @ 2005-10-09 23:07 风 阅读(1230) | 评论 (0) | 编辑 收藏

CVS的远程认证通过SSH远程访问CVS

使用cvs本身基于pserver的远程认证很麻烦,需要定义服务器和用户组,用户名,设置密码等,

常见的登陆格式如下:
cvs -d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot login
例子:
cvs -d :pserver:cvs@samba.org:/cvsroot login

不是很安全,因此一般是作为匿名只读CVS访问的方式。从安全考虑,通过系统本地帐号认证并通过SSH传输是比较好的办法,通过在客户机的 /etc/profile里设置一下内容:
CVSROOT=:ext:$USER@cvs.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。

比如:

CVS服务器是192.168.0.3,上面CVSROOT路径是/home/cvsroot,另外一台开发客户机是192.168.0.4,如果 tom在2台机器上都有同名的帐号,那么从192.168.0.4上设置了:
export CVSROOT=:ext:tom@192.168.0.3:/home/cvsroot
export CVS_RSH=ssh
tom就可以直接在192.168.0.4上对192.168.0.3的cvsroot进行访问了(如果有权限的话)
cvs checkout project_name
cd project_name
cvs update
...
cvs commit

如果CVS所在服务器的SSH端口不在缺省的22,或者和客户端与CVS服务器端SSH缺省端口不一致,有时候设置了:
:ext:$USER@test.server.address#port:/path/to/cvsroot

仍然不行,比如有以下错误信息:
ssh: test.server.address#port: Name or service not known
cvs [checkout aborted]: end of file from server (consult above messages if any)

解决的方法是做一个脚本指定端口转向(不能使用alias,会出找不到文件错误):
创建一个/usr/bin/ssh_cvs文件,假设远程服务器的SSH端口是非缺省端口:34567
#!/bin/sh
/usr/bin/ssh -p 34567 "$@"
然后:chmod +x /usr/bin/ssh_cvs
并CVS_RSH=ssh_cvs; export CVS_RSH

注意:port是指相应服务器SSH的端口,不是指cvs专用的pserver的端口

posted @ 2005-10-08 20:18 风 阅读(1284) | 评论 (1) | 编辑 收藏

OpenSSH:让远程管理更安全

安全和稳定是Linux操作系统的两大特点。由于Linux采取了许多安全技术措施,包括读/写权限控制、带保护的子系统、审计跟踪、核心授权等,为网络多用户环境中的用户提供了必要的安全保障,因此越来越多的用户开始学习和使用Linux。但是Linux的安全要建立在有效的防范基础上,如果是一个不加任何防范和限制的Linux系统,同样也有较多漏洞。以传统的网络服务程序为例,FTP、R Shell和Telnet等服务在本质上都存在不安全因素,因为它们在网络上用“明文”传送口令和数据,使别有用心的人很容易截获这些口令和数据。同时这些服务程序的安全验证方式也有弱点,很容易受到“中间人”(man-in-the-middle)的攻击。所谓“中间人”的攻击方式,即“中间人”冒充真正的服务器接收用户传给服务器的数据,然后再冒充该用户把数据传给真正的服务器。服务器和用户之间的数据传送被“中间人”做了手脚之后,会出现很严重的问题。所以,尽可能地使用安全的工具来管理系统显得愈发重要。

  传统远程管理工具的特点

  远程登录的作用就是让用户以模拟终端的方式,登录到Internet的某台主机上。一旦连接成功,这些个人计算机就像远程计算机的一个终端,可以像使用终端计算机一样输入命令,并运行远程计算机中的程序。

  在企业通常的使用环境中,服务器放在ISP托管中心或其服务器机房内,只有少数人才能进入并接触到主机。因此管理员通常会在服务器上开启Telnet服务守护进程,以便能够随时观察服务器上的变化,并登录到服务器上进行维护;如果管理员需要在服务器调试程序,还会开启FTP服务进程,从本地机上传程序到服务器进行调试(如图1所示)。可见这种终端的服务对网络管理员来说非常重要。

  图1 管理员利用终端服务对ISP进行操控

  一般在远程管理中经常使用远程管理Telnet的工具有CRT、 NetTerm、ShellNet,以及Rlogin、Rcp、Rexec、Rsh(所有以“R”开头的服务都建立在不与外界进行任何联系的基础上。出于安全方面的考虑,必须禁止这些进程的启动)。这些工具的优点是使用方便、配置简单;缺点是不够安全。以Telnet为例,因为其以“明码”传输,所以不能称为一个很好的联机方式。什么是“明码”?简单地说,使用Telnet时,系统会出现一个主机界面,如果没有设置系统的issue.net文件为空,系统默认出现的界面就会泄露一些对用户不利的信息给别人,如图2所示。



  图2 Telnet登录主机界面

  用户需要输入账号与密码,当主机接受资料后才能进行确认。此时,用户资料就会经过 Telnet协议传输到主机上。如果有人正在某个router节点监听封包,就可以轻而易举地截获资料封包,并可以通过解读窃取账号和密码。建议非必要时不要激活Telnet;如果一定要激活,必须确定限制的联机范围,并使用iptables设定联机的限制区域。此外,还要随时注意登录档案里关于登录的事项,不要让root用户以Telnet方式登入Linux主机。

  SSH及OpenSSH简介

  SSH(Secure Shell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH。

  用户通过SSH可以把所有传输的数据进行加密,使“中间人”的攻击方式不可能实现,而且也能够防止DNS和IP欺骗。它还有一个额外的好处是传输的数据是经过压缩的,可以加快传输的速度。SSH作用广泛,既可以代替Telnet,又可以为FTP、POP,甚至为PPP提供一个安全的“通道”。SSH协议在预设的状态中,提供两个服务器功能:一个是类似Telnet的远程联机使用Shell服务器,即俗称SSH功能;另一个是类似FTP服务的SFTP-Server功能,可提供更安全的FTP服务。

  SSH的安全验证如何工作呢?主要依靠联机加密技术。从客户端来看,有以下两种安全验证级别:

  1.基于口令的安全验证(ssh1) 只要知道自己的账号和口令,就可以登录到远程主机。所有传输的数据都将被加密,但是不能保证正在连接的服务器就是想要连接的服务器。可能受到“中间人”的攻击。

  2.基于密匙的安全验证(ssh2) 需要依靠密匙,即用户必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用密匙进行安全验证。服务器收到请求之后,先在该服务器的home目录下寻找公用密匙,然后把它和发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge),并把它发送给客户端软件。客户端软件收到“质询”后,就可以用私人密匙解密再把它发送给服务器。使用这种方式,用户必须知道自己密匙的口令。与第一种级别相比,这种级别不需要在网络上传送口令,不仅加密所有传送的数据,而且阻止了“中间人”攻击方式。整个登录的过程一般需要10秒。

  OpenSSH的安装和启动

  OpenSSH的安装非常简便,操作如下。

  1.下载软件包。到http://www.openssh.com下载最新软件包OpenSSH 3.6.1(最好下载源程序软件包后自行编译)。本文以openssh-3.5p1.tar.gz为例进行介绍,安装环境为Red Hat 7.1/kernel 2.4.8/gcc-2.96-98。

  2. 解压及安装,代码如下:

# tar zxvf openssh-3.5p1.tar.gz
# cd openssh-3.5p1
# ./configure --prefix=/opt --sysconfdir=/etc/openssh
# make
# make install
# cd /etc/rc.d/init.d/
# vi sshd
//加入/opt/sbin/sshd启动进程
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/sshd S59sshd



  重启计算机以后,用下列命令进行测试:

# ssh -l  geminis  www.test.com
The authenticity of host 'www.test.com (*.*.*.*)' can't be established.
RSA key fingerprint is a7:35:3c:bd:47:b0:5d:30:68:f1:15:77:1a:b1:67:dd.
Are you sure you want to continue connecting (yes/no)?



  因为是第一次登录主机,OpenSSH将显示不能识别该主机。键入“yes”,把主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息。然后,OpenSSH提示输入远程主机上的账号及口令。输入完后就建立了SSH连接,可以像使用 Telnet一样使用OpenSSH。

  配置基于密钥认证的OpenSSH

  缺省情况下,SSH将默认使用口令验证方式。不需要对系统进行任何配置就可以使用账号和口令登录到远程主机。下面介绍如何配置并使用基于密匙认证的OpenSSH(假设用户名为geminis,主机IP为192.168.0.1)。

  首先创建一对密匙(包括公匙和密匙,并且用公匙加密的数据只能用密匙解密),把公匙放到需要远程服务器上。当登录远程服务器时,客户端软件会向服务器发出请求,请求用密匙进行认证,代码如下:

# ssh-keygen -d
// 加上参数d是创建一个一基于ssh2的密匙对 
#Generating public/private DSA key pair. 
// 生成DSA加密模式的密匙对
# Enter file in which to save the key (/home/geminis/.ssh/id_dsa): 
//存放密匙文件的路径,直接回车为默认目录
# Enter passphrase (empty for no passphrase):
//必须输入一个>4个字符的标识符
# Enter same passphrase again:
//重新确认一次



  如果创建成功,系统将返回以下信息:

Your identification has been saved in /home/geminis/.ssh/id_dsa.
Your public key has been saved in /home/geminis/.ssh/id_dsa.pub.
The key fingerprint is:
29:1b:46:00:08:38:d5:87:da:96:e7:c4:a3:6b:b1:3f geminis@www.test.com



  接下来,把id_dsa.pub发布到服务器上。通过FTP将公匙文件“/home/admin/.ssh/id_dsa.pub”,复制到远程服务器的“/home/admin/.ssh”目录。如果.ssh目录不存在,可以用mkdir命令先建立。然后,将“id_dsa.pub”重命名为“authorized_keys2”,代码如下:

# mv id_dsa.pub authorized_keys2
# chmod 644 authorized_keys2



  注意,如果authorized_keys2文件的权限不正确,会导致SSH连接失败。

  服务器收到请求之后,在该服务器的宿主目录下寻找公匙,然后检查该公匙是否合法。如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件。客户端软件收到后就用私匙解密再把它发送给服务器。因为用公匙加密的数据只能用密匙解密,服务器经过比较就可以知道该客户连接的合法性。连接代码如下:

# ssh -l geminis www.test.com



  系统返回以下信息:

# Enter passphrase for key '/home/geminis/.ssh/id_dsa': ******
Last login: Wed Apr 16 12:31:49 2003 from www.geminis.com



  OpenSSH客户端使用方法

  1. Windows平台

  客户端通常使用Windows平台,操作较为直观。下面对几种客户端工具进行介绍。

  ◆ PuTTY

  在客户端使用SSH较好的工具是PuTTY,这是一个开源软件。用户可以根据自己的配置情况对该软件进行修改,如图3所示。



  图3 PuTTY配置界面

  如果是第一次使用该软件,系统会提示下载有关主机的“识别标记”,选择“yes”,下次登录就不会出现提示框。

  ◆ Filezilla

  Filezilla是客户端使用SFTP的一款不错的开源软件,对中文支持很好,配置界面如图4所示。



图4 Filezilla配置界面

  2. Linux终端

  在Linux终端下使用SSH,优点是操作更方便,无须其它软件;缺点是不太直观。使用方法及命令介绍如下:

  ◆ SSH的使用

# ssh -l geminis www.test.com
Enter passphrase for key '/home/geminis/.ssh/id_dsa': 
//输入以前设置的标识符



  ◆ SFTP的使用

  # sftp www.test.com



  SFTP相关命令的使用方法如表1所示。

  3.进阶提高要点

  配置SSH客户端文件“/etc/ssh/ssh_config”,如图5所示。

  图5 配置“/etc/ssh/ssh_config”文件

  表1 SFTP相关命令的使用方法

  选项设置说明如表2所示。

  表2 SSH配置选项说明

  配置SSH服务器端文件“/etc/ssh/sshd_config”,取消口令验证。把“PasswordAuthentication Yes”改为“no”,可以禁止使用第一种口令验证。

  配置“/etc/ssh/sshd_config”文件,编辑“sshd_config”文件,加入或改变下面的参数:

# This is ssh server systemwide configuration file. 
Port 22 
ListenAddress 192.168.1.1 
HostKey /etc/ssh/ssh_host_key 
ServerKeyBits 1024 
LoginGraceTime 600 
KeyRegenerationInterval 3600 
PermitRootLogin no 
IgnoreRhosts yes 
IgnoreUserKnownHosts yes 
StrictModes yes 
X11Forwarding no 
PrintMotd yes 
SyslogFacility AUTH 
LogLevel INFO 
RhostsAuthentication no 
RhostsRSAAuthentication no 
RSAAuthentication yes 
PasswordAuthentication yes 
PermitEmptyPasswords no 
AllowUsers admin

posted @ 2005-10-08 16:52 风 阅读(1014) | 评论 (0) | 编辑 收藏

用ssh方式访问cvs的配置

1.环境: redhat

2.服务器配置
 a.设置用户能通过ssh方式登入cvs server
 
 b.确定/etc/service文件有如下两行
 cvspserver      2401/tcp                   
 cvspserver      2401/udp       
 
 c.在/etc/xinetd.d目录下建立cvspserver文件,内容如下
 service cvspserver
 {
         disable = no
         flags = REUSE
         socket_type = stream
         wait = no
         user = root
         env = HOME=
         server = /usr/bin/cvs
         server_args = -f --allow-root=/opt/cvsroot/REPORT pserver
         log_on_failure += USERID
         only_from = 127.0.0.1
         bin = 127.0.0.1
 }

3.客户端配置
 a.用tortoiseCVS做cvs客户端,protocol选择"Secure shell (:ext:)"
 
 b.eclipse中protocol选择extssh即可

 c.其他客户端设置去问google

posted @ 2005-10-08 15:27 风 阅读(477) | 评论 (0) | 编辑 收藏

更新My Eclipse4.0GA 至4.01 及破解方法

1、关于My Eclipse4.0GA更新 至4.01
eclipse现在已经更新至3.11了。下载网址:
http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.1.1-200509290840/eclipse-SDK-3.1.1-win32.zip
目前My Eclipse4.01已经支持Eclipse3.11了。Version 4.0.1是4.0系列的第一个release版的补丁,他主要修复的问题如下:
ID Defects - FIXED Notes
893 HTML Editor: change autoclosing action to auto-suggesting the closed tag
1092 DB: Cancel in Edit Connection Profile does not rollback changes
1113 XML namespaces defined as part of the root element not recognized See link for details.
1140 CSS Editor Style properties are not used during formatting or the "Cleanup Document" dialog See link for details.
1412 CSS Editor stops accepting input when validation of types values fails
1416 JSP formatter throws an exception See link for details.
1494 WebDesigner: Design Selection is lost if the application loses focus (ie Alt+Tab)
1640 XML formatter not working when file not terminated with new line
1707 UML: Generate Java menubar action disabled See link for details.
1740 UML: quick-connections do not honor color preferences
2177 "Del" key does not work consistently in outline view
2210 Hibernate: Profiles not synchronized betwee DB Brower and Hibernate Config editor
2221 Add to Snippets causing SWT Exception
2258 Structured Editors: Line delimiter preferences don't work
2269 UML: Only one diagram is deleted at a time.
2355 Hibernate: minimize the copy-set of files into project
2356 SessionEJB wizard creates incorrect access level for example method See link for details.
2375 Updated EMF/GEF/JEM plugins
2405 Hibernate: add capabilities wizard layout needs improvement
2415 WebDesigner: No way to "unselect" an element from HTML
2417 UML: Change context-menu action Export as Image to single menu item
2422 Struts: Actions in the New menu in the Struts designer popup menu start with "New"
2455 WebDesigner: Anchor / HR insertion styling issue
2459 Hibernate: After adding mapping in DB Browser user is switched to ME perspective
2463 Opening external image file throws NPE and shows ErrorEditor
2483 WebDesigner: JSF Rendered attribute inconsistencies
2485 WebDesigner: Saving document in design view will remove focus
2500  Save As... causes editor highlighting issue
2520 WebDesigner: Hyperlink wizard enabled for whitespace
2521 JSF: Save As dialog reopens several times.
2522 Spring library property page won't fail if library file paths don't exist
2525 UML: Vanishing extension points in use case diagrams See link for details.
2527 JSF: Entering an EL expression for a managed bean property value causes wizard to error See link for details.
2528 WebDesigner: Save in design pane saves but still indicates editor dirty
2529 XML reconciler incorrectly marking spaces before a processing instruction as an error See link for details.
2531 JSP Source menu listed twice See link for details.
2532 UML: Changeability setting not being honored See link for details.
2533 Updated Install/Uninstall Quickstart documentation
2536 Hibernate 2.0 DTD needs to be updated with version from the hibernate site See link for details.
2537 DB: Create table script does not quote table names See link for details.
2538 Update WebProjects quickstart for ME 4.0
2540 Javascript: Encoding preference required See link for details.
2542 Update EAR projects quickstart for ME 4.0
2544 Update installer launch params to increase permsize
2545 Undo in all editors does not scroll view back to undone change location See link for details.
2547 WebDesigner: Improve performance of

/ adjustment

2552 DB: Schema Details choices not saved while creating a new profile
2553 DB: Profiles and Drivers are persisted only on normal Eclipse exit
2554 DTD encoding and line delimiter preference page blank
2556 XSD: Properties view layout is clipping area See link for details.
2561 WebDesigner: Source doesn't sync on some examples with Return key
2562 WebDesigner: Context-menu Copy action performs design > source sync
2564 Ctrl+B/I/U don't work in JSP designer
2565 Webdesigner: Copy/Paste of relative IMG rewrites URL as absolute
2566 Webdesigner: Preview view doesn't respect attributes without quotes ""
2567 Webdesigner: Typing into
 node in design view doesn't entitize characters
2568 DB: Table info view selects Columns tab each time a new table is selected
2570 UML: normalize presentation properties and prefs See link for details.
2571 DB: Unique column in Columns tab of Table Info should show NA if Index info is NA
2572 DB: Database Explorer preference page does not react instantaly to "Restore Defaults"
2573 Update Application Servers Quickstart to be consistent with ME4.0
2574 Update Subscription Quickstart to be consistent with ME4.0
2575 Update Struts Quickstart to be consistent with ME4.0
2576 Update JSF Quickstart to be consistent with ME4.0
2577 Update EJB Quickstart to be consistent with ME4.0
2578 Update Remove Debugging Quickstart to be consistent with ME4.0
2579 Update Hibernate Quickstart to be consistent with ME4.0
2580 Webdesigner: Del at end of

elements leads to unsychronized state

2582 Webdesigner: Adding / deleting
to source syncs changes to design multiple times
2584 DB: Drivers preference page 'Cancel' behaviour
2586 JSF: Doubleclicking the problem marker in the problems view opens graphical designer instead of selecting the source in the source editor
2588 Hibernate 3 libraries do not match libraries in Hibernate 3 core download See link for details.
2591 Webdesigner: Find increments src selection, doesn't update design selection
2594 XML Source formatting preferences are ignored See link for details.
2599 Update subscription description to show free upgrade to professional subscription
2602 Documentation: ERD relationship annotations need to be documented See link for details.
2610 Reenable exploded deployment for Jetty See link for details.
2614 Update DBExplorer User Guide
2616 Webdesigner: Changing the font style changes the selection.
2620 DB: Table info view changes / refreshes only when tables are selected
2622 Webdesigner: JSF/Struts Form wizard inserts closed,inline tag in source
2624 Webdesigner: Single change in the designer causes multiple changes in the source view that are not treated as a single change.
2640 Updated JSF Quickstart to be consistent with ME 4.0
2641 Webdesigner: Don't update attributes on Cut in designer
2642 DB: Table info view selects first tab each time new entity in DB Browser is changed
2643 CCE thrown from property sheet when selecting h:inputText
2651 UML: DnDed class does not appear in diagram if superclass not in model
2656 Spring: DAO/ORM module missing hibernate files See link for details.
2659 Webdesigner: Browse button in Hyperlink wiz puts webroot relative path
2663 Spring capabilites TLD issues resolved.
2664 Update Struts 1.2 Template's use of html: tag See link for details.
下载My Eclipse4.01:http://downloads.myeclipseide.com/downloads/products/eworkbench/4.0.2GA/EnterpriseWorkbenchInstaller_4.0.2GA_E3.1.exe
2、破解方法:
用破解的4.0 core.jar中的com.genuitec.eclipse.core.c.class替换掉4.0.1中的相同类。

posted @ 2005-10-07 11:26 风 阅读(2201) | 评论 (1) | 编辑 收藏

仅列出标题
共20页: First 上一页 11 12 13 14 15 16 17 18 19 下一页 Last 
 
Powered by:
BlogJava
Copyright © 风