shell自动登录ssh并运行另外一台机器上的脚本

平时工作,如果客户有买linux服务器,经常要帮客户安装一些东西,这时得登录客户的服务器,然后从我们公司的服务器拷贝脚本,然后再运行,比较麻烦.
使shell利用python的SimpleHTTPServer模块可以很方便的进行操作(剑走偏锋)
PS: perl的net::ssh与ruby的net/ssh都是现成的.
以后直接运行它就可以了!

  1. #!/bin/bash
  2. use () {
  3.         echo -e "try again.\teg: ./$0 1.1.1.1" && exit 1
  4. }
  5. echo $(echo $@)|grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 2>&1 >/dev/null
  6. if [ $? -ne 0 ]
  7.         then
  8.         use
  9. if [ $# != 1 ]
  10.         then
  11.         use && exit 1
  12.         fi
  13.         fi
  14. cd /root/K
  15. python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"  2>&1 >/dev/null &
  16. ssh -tt $@ <<EOF
  17. curl Your_Server_IP:8000/Some_Script|bash && exit
  18. EOF
  19. ps aux|grep \[S]impleHTTPServer|awk '{print "kill -9",$2}'|bash
  20. echo "all the jobs has been done!"

grep不显示本身进程

无需传统意义上的 grep xx|grep -v grep ……

  1. [root@Centos ~]# ps aux|grep ssh
  2. root      1959  0.0  0.2   7076  1064 ?        Ss   Oct02   0:00 /usr/sbin/sshd
  3. root      5812  0.0  0.1   3920   688 pts/1    R+   15:30   0:00 grep ssh
  4. root     18278  0.0  0.5  10076  2912 ?        Ss   Oct06   0:18 sshd: root@pts/1 
  5. [root@Centos ~]# ps aux|grep \[s]sh
  6. root      1959  0.0  0.2   7076  1064 ?        Ss   Oct02   0:00 /usr/sbin/sshd
  7. root     18278  0.0  0.5  10076  2912 ?        Ss   Oct06   0:18 sshd: root@pts/1

Linux命令行 快速查看本机IP

利用curl命令抓取网页,快速查看本机IP,无需文本过滤,直接就可以查看.

  1. curl ip.appspot.com

perl ping检测脚本

我的第一个用于生产环境的perl脚本,虽然不是很优秀,但也迈出了扎实的一步 :)
领导有任务,给一批IP列表,ping每一台机器,如果没有响应就发邮件通知,通知的邮件需要分开,不能通知一个列表,得一封一封的通知.
用到email::send模块,因为需要用到Gmail

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Email::Send;
  5. use Email::Send::Gmail;
  6. use Email::Simple::Creator;
  7. my @list = qw/
  8. 1.1.1.1
  9. 2.2.2.2
  10. 3.3.3.3
  11. /;
  12. foreach my $re (@list){
  13.         my $p = `ping $re -c 3`;
  14.         if($p=~/100% packet loss/){
  15.                 my $email = Email::Simple->create(
  16.                 header => [
  17.                 From    => 'monitor@a.com',
  18.                 To      => 'monitor@b.com',
  19.                 Subject => "$re 100% packet loss",
  20. ],
  21. body => "$re the server is down!\n",
  22.  );
  23.                 my $sender = Email::Send->new(
  24.                 { mailer => 'Gmail',
  25.                 mailer_args => [
  26.                 username => 'monitor@a.com',
  27.                 password => 'xxx',
  28.                 ]
  29.                 }
  30. );
  31.         eval { $sender->send($email) };
  32.         die "Error sending email: $@" if $@;
  33.         }
  34. }

perl模块_List::Util

1加2加3加4 … 加到100,试了一下还是perl最快
需要用到perl的List::Util模块.

  1. [root@centos perl]# more plus.pl
  2. #!/usr/bin/perl -w
  3. use strict;
  4. use List::Util qw[sum];
  5. my $t = sum(1..100);
  6. print "$t\n";
  7. [root@centos perl]# perl plus.pl
  8. 5050

shell取巧的方法也很简单,利用seq与sed和bc
seq生成数字,sed将空格替换为加号,通过管道传递给bc进行加法运算.

  1. [root@centos perl]# seq -s " " 100|sed 's/ /+/g'|bc
  2. 5050
8 «12345»...8