鹏鹏之家 2011-05-11
背景:
公司的邮件服务器是Linux+AD的,因为所有用户都在AD里面,所以当建了一个用户以后还得SSH到Linux服务器上建个邮箱目录,非常麻烦。所以准备写一个程序一次性搞定。
主要的步骤是1. 增加用户到AD中同时更新用户的mail属于。2.根据建立的用户远程在Linux服务器上的邮件目录建立并设置目录权限。
如果你的是Linux+MYSQL也是可以的。只是用你的WINDOWS客户端更新MYSQL数据库和在邮件服务器上建用户目录。
要求:
要实现在WINDOWS上远程执行Linux的命令需要使用SSH,但是因为我没有找到在windows上的纯ssh客户端程序,所以我安装了cygwin,并安装了ssh。利用SSH工具来远程执行命令,命令语法如下: ssh [email protected] command
实现:
1.安装cygwin
下载: http://cygwin.com/ 选择右上角的 Install or update cygwin
2. 安装
标准的WINDOWS的安装模式,next->next 在下图中增加“中国的站点”速度会快很多
在这里选择增加安装ssh,在查找那里输入ssh,注意最后一个openssh,点一下ship变成Install,我的因为安装这了所以自动变为Keep.OK,next直到完成。
3、用你常用的编程软件【如果不想这么复杂完合可以使用脚本,更新也可以dsmod命令集完成AD的更新】
我这里使用C#,建一个工程界面如下:注意:Linux服务器IP地址,SSH的用户名、密码等因为是测试,所以我写入到程序里面去了,你完全可以增加TextBox用变量调用或使用xml做成配置文件,如果不怕安全问题你完全直接为Textbox的Text属性写为Defaut值。最好的办法休用ssh的证书自动登录。
4、在Linux服务器的/root/下建立test.sh 脚本。注意:我这里调了一extman中的maildirmake.pl文件来建目录,如果你没有可以建每一个目录,目录的结构为:username/Maildir/下有三个文件子文件夹:cur new tmp三个。
#-------/root/test.sh
# Create by D.W.H 2010.8.10
#!/bin/sh
username=$1
tool=/var/www/extman/tools/maildirmake.pl
dataf=/mail/test.com
$tool $dataf/$username/Maildir
/bin/chown –R vuser.vgroup dataf/$username
#----END
5. 为c#程序中的Run事件增加代码
private void button1_Click(object sender, EventArgs e)
{
try
{
System.Diagnostics.Process.Start("H:\\cygwin\\cygwin.bat");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
// maildirmake.pl /data/mail/test.com/username/Maildir
string sshcommand = "ssh [email protected]";
SendKeys.Send(sshcommand);
SendKeys.Send("{Enter}");
System.Threading.Thread.Sleep(100);
// sshpwd是ssh用户的密码根据你的密码自行更改
string sshpwd = "123456";
SendKeys.Send(sshpwd);
SendKeys.Send("{Enter}");
System.Threading.Thread.Sleep(100);
/*
* //第一次使用ssh的时候会提示你回答answer
string answer = "yes";
SendKeys.Send(answer);
SendKeys.Send("{Enter}");
*/
string command=textBox1.Text +" " + textBox2.Text;
SendKeys.Send(command);
System.Threading.Thread.Sleep(100);
SendKeys.Send("{Enter}");
/*
string strexit = "exit";
SendKeys.Send(strexit);
SendKeys.Send("{Enter}");
* System.Threading.Thread.Sleep(100);
SendKeys.Send(strexit);
SendKeys.Send("{Enter}");
* //System.Threading.Thread.Sleep(100);
*/
}
6.测试:可以看到这里我只建了两个邮件目录.st和test两个用户。
结束:
这个程序只起一个抛砖引玉的功能其它的请根据自忆的情况自行增加完善.