Bash 远程拷贝文件的函数

需安装 才能正常使用。

 install -y expect;
#!/usr/bin/env 
#远程拷贝文件
set -e;

#拷贝远程文件到本地
EXPECT_CP_R(){
  local EXUSR=${1}
  local EXHOST=${2}
  local EXPWD=${3}
  local R_FILE=${4}
  local L_FILE=${5}

  expect -c "
    set timeout 300
    spawn scp -qr ${EXUSR}@${EXHOST}:${R_FILE} ${L_FILE}
    expect {
      \"not known\" {send_user \"[exec  -e Erro:Host not known\n];exit\"}
      \"Connection refused\" {send_user \"[exec  -e Erro:Connection refused\n];exit\"}
      \"(yes/no)?\" {send \"yes\r\";exp_continue}
      \"password:\" {send \"${EXPWD}\r\";exp_continue}
      \"Permission denied\" {send_user \"[exec  -e Erro:Wrong \n];exit\"}
      \"]*\" {send \"\r\"}
      \">*\" {send \"\r\"}
    }
  "
}

#拷贝本地文件到远程
EXPECT_CP_L(){
  local EXUSR=${1}
  local EXHOST=${2}
  local EXPWD=${3}
  local L_FILE=${4}
  local R_FILE=${5}

  expect -c "
    set timeout 300
    spawn scp -qr ${L_FILE} ${EXUSR}@${EXHOST}:${R_FILE}
    expect {
      \"not known\" {send_user \"[exec  -e Erro:Host not known\n];exit\"}
      \"Connection refused\" {send_user \"[exec  -e Erro:Connection refused\n];exit\"}
      \"(yes/no)?\" {send \"yes\r\";exp_continue}
      \"password:\" {send \"${EXPWD}\r\";exp_continue}
      \"Permission denied\" {send_user \"[exec  -e Erro:Wrong passwd\n];exit\"}
      \"]*\" {send \"\r\"}
      \">*\" {send \"\r\"}
    }
  "
}
Bash 远程拷贝文件的函数

Bash 远程执行命令的函数

需安装 才能正常使用。

 install -y expect;
#!/usr/bin/env 
#远程执行命令
set -e;

EXPECT_SH(){
  local EXUSR=${1}
  local EXHOST=${2}
  local EXPWD=${3}
  local EXCMD=${4}
  expect -c "
    set timeout 300
    spawn ssh ${EXUSR}@${EXHOST}
    expect {
      \"not known\" {send_user \"[exec  -e Erro:Host not known\n];exit\"}
      \"Connection refused\" {send_user \"[exec  -e Erro:Connection refused\n];exit\"}
      \"(yes/no)?\" {send \"yes\r\";exp_continue}
      \"password:\" {send \"${EXPWD}\r\";exp_continue}
      \"Permission denied\" {send_user \"[exec  -e Erro:Wrong \n];exit\"}
      \"]*\" {send \"\r\"}
      \">*\" {send \"\r\"}
    }
    send \"${EXCMD}\rexit\r\"
    expect eof
  "
}
Bash 远程执行命令的函数

Expect 远程执行检查函数

需安装 才能正常使用。

 install -y expect;
#!/usr/bin/env 
#expect 功能检查
set -e;

EXPECT_CHECK(){
  local EXUSR=${1}
  local EXHOST=${2}
  local EXPWD=${3}
  #ssh test
  EXP_RST=`
    expect -c "
      set timeout 300
      spawn ssh ${EXUSR}@${EXHOST} \" PASS\"
      expect {
        \"not known\" {send_user \"[exec  -e Erro:Host not known\n];exit\"}
        \"Connection refused\" {send_user \"[exec  -e Erro:Connection refused\n];exit\"}
        \"(yes/no)?\" {send \"yes\r\";exp_continue}
          \"password:\" {send \"${EXPWD}\r\";exp_continue}
        \"Permission denied\" {send_user \"[exec  -e Erro:Wrong \n];exit\"}
      }
    "| -E 'PASS|Erro'| -v | 's/\r//g;s/\n//g'
  `
  if [[ ${EXP_RST} && ${EXP_RST} == PASS ]]; then
     -e "\nEXPECT CHECK COMPLETE!\n";
    return 0;
  else
     -e "\n${EXUSR}@${EXHOST} EXPECT CHECK ERROR!\n";
     -e "\n${EXP_RST}\n";
    return 1;
  fi
}
Expect 远程执行检查函数

shell 使用 expect 编写远程执行脚本

作为自动交互工具,在 里应用广泛,在设置密码的情况下,可以模拟人工流程对远程主机执行指定操作,大大简化了登录流程,降低了运维成本。但如果直接把功能写在一个脚本,密码要明文定义,不是很安全,而且其他地方调用也不方便,既然这样,何不把 远程登录执行写成一个函数,供其他脚本快捷调用呢,在方便的同时,也可以通过权限控制,有效地避免密码泄露。下面就来说说如何把 远程执行功能变成一个可调用的函数。

Continue reading “shell 使用 expect 编写远程执行脚本”

shell 使用 expect 编写远程执行脚本

shell 统计脚本执行时间

今天某台主机使用 sftp 进行文件传输的时候,由于网络原因,断断续续,时好时坏,已然影响到程序的正常运行。但是在跟领导解释时,却被说成是程序问题,让我们自行分析。 So ,为了能得出一个让大家都信服的结论,只能写个统计 sftp 连接时长的脚本,用来记录 sftp 连接是否正常。

Continue reading “shell 统计脚本执行时间”

shell 统计脚本执行时间

如何让 expect 和 bash 共存

在编写脚本时,为了安全地在主机间执行命令,很多人都用上了 命令(其实也算不上十分安全,但总比打通 ssh 免密码登录要好点)。在编写脚本中, #!/usr/bin/expect#!/bin/ 无法同时定义,全程用 expect 又觉得无比麻烦。所以很多操作都需要写两个脚本,一个 expect 用于远程操作,一个 bash 用于过滤信息及进行后续操作。

其实使用一个 expect 参数就可以让两种命令共存了。

Continue reading “如何让 expect 和 bash 共存”

如何让 expect 和 bash 共存

利用 sed 去除指定输出字符

最近在利用 CU 的短信接口给公司的各种服务编写各种自动短信告警脚本,在进行主机空间预警的时候,一开始出现百分数无法进行对比的情况,比如 30%>10% 会出错,利用 对百分号进行去除后 sed 's/%//g' 后可以正常进行对比并执行下一步条件。

刚开始还觉得挺简单,后来利用 进行远程主机磁盘空间监控的时候,进行阈值对比时出现 invalid arithmetic operator 错误,无法识别指定字符。

Continue reading “利用 sed 去除指定输出字符”

利用 sed 去除指定输出字符