使用expect实现远程ssh命令执行和scp拷贝文件

本文介绍了一种利用Expect脚本实现SSH无密码执行远程命令的方法。通过定义函数ssh_exec,可以便捷地在目标主机上执行指定命令,无需手动输入密码。此方案适用于运维场景下的批量操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作运维需要远程不输入密码运行命令,鼓捣了下expect,实现了一个远程调用的函数。 调用方式ssh_exec ip pwd cmd。记录一下免得以后找不到了需要重新搞。 其他人有需要可以直接用,不过记得适配一下自己的环境,主要的应该是expect里面的*#匹配,这个匹配的是linux系统上的shell的固定显示的那部分,比如linux-osewGl:~ #之类的。

function ssh_exec () {
    local ip=$1
    local passwd=$2
    local cmd=$3
    [ -z "$ip" -o -z "$passwd" -o -z "$cmd" ] && return 1
    /usr/bin/expect << EOF
    proc remote_exec {ip passwd cmd} {
        spawn ssh root@\$ip
        exp_internal 0
        expect {
            "yes/no" { send "yes\\r";exp_continue}
            "*password:" {send "\$passwd\\r"}
        }
        expect "*#"
        send "\$cmd\\r"
        expect "*#"
        send "exit"
        close
    }

    remote_exec "$ip" "$passwd" "$cmd"
EOF
}

function scp_get () {
    local ip=$1
    local passwd=$2
    local src=$3
    local dst=$4

    [ -z "$ip" -o -z "$passwd" ] && return 1
    /usr/bin/expect << EOF
    proc remote_exec {ip passwd src dst} {
        spawn scp root@\$ip:\$src \$dst
        exp_internal 0
        expect {
            "yes/no" { send "yes\\r";exp_continue}
            "*password:" {send "\$passwd\\r"}
        }
        expect eof
    }

    remote_exec "$ip" "$passwd" "$src" "$dst"
EOF
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值