shell脚本中用SSH执行远程指令并获取输出
目的是实现shell脚本通过SSH获取另外一台终端输出,这样就可以快速的获取到另外一台终端的各种信息。 百度后参考了一些代码,假设我想要获取另一台终端的语言环境,远程执行locale,具体的执行的远程指令可以随意设置,这个脚本为基础,脚本代码如下: 调用方法./ssh.sh 192.168.1.1...
·
shell脚本中用SSH执行远程指令并获取输出
1、应用背景
目的是实现shell脚本通过SSH获取另外一台终端输出,这样就可以快速的获取到另外一台终端的各种信息。
2、第一个SSH脚本 exp.sh
百度后参考了一些代码,假设我想要获取另一台终端的语言环境,远程执行locale,具体的执行的远程指令可以随意设置,这个脚本为基础,脚本代码如下:
#!/usr/bin/expect
if {$argc<4} {
puts "Error params: $argv"
puts "Expect params :user passwd ip port [translate_id]"
exit 1
}
set default_passcode "这⾥填通道机的默认密码"
set user [lindex $argv 0]
set password [lindex $argv 1]
set ip [lindex $argv 2]
set port [lindex $argv 3]
set timeout 3
while 1 {
spawn bash -c "ssh -p $port $user@$ip << EOF\nlocale\nexit\nEOF"
#如果最后的字符匹配则执⾏命令\r结尾表⽰确定
expect {
"*yes/no" { send "yes\r";exp_continue}
"*password:" { send "$password\r" }
}
#这⾥是需要通过通道机登陆时的匹配流程,根据需要⾃⾏修改。
expect {
"*PASSCODE:" {
send_user "请输⼊通道机动态密码:";
expect_user -re "(.*)\n"
set random_passcode $expect_out(1,string)
send "$default_passcode$random_passcode\r"
expect {
"Access Denied" { continue }
"Enter:" { send "1\r" }
}
set translate_ip [lindex $argv 4]
if { $translate_ip != "" } {
expect "*):" { send "$translate_ip\r" }
}
}
#"Last login:*" { }
}
break
}
3、第二个调用脚本 ssh.sh
调用方法./ssh.sh 192.168.1.1
#!/bin/bash
rm ~/.ssh -rf
password=$2
function my_note() {
printf "\n第一个参数请输入IP\n第二个参数是密码, 可不填, 默认是abcd1234\n\n"
}
function check_ip() {
IP=$1
VALID_CHECK=$(echo $IP | awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $IP | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
if [ ${VALID_CHECK:-no} == "yes" ]; then
echo "获取设备信息中……"
else
echo "IP $IP 不可用!"
my_note
exit 0
fi
else
echo "IP 格式错误!"
my_note
exit 0
fi
}
# 1、检测IP合法性
check_ip $1
# 2、设置密码
if [ "$2" = "" ]; then
password="123456789"
fi
# 3、远程SSH执行locale
expect ./exp.sh username $password $1 22
更多推荐
已为社区贡献1条内容
所有评论(0)