expect 를 사용 하여 원 격 ssh 명령 실행 과 scp 복사 파일 을 실현 합 니 다.

1571 단어
작업 운영 비 는 원 격 으로 비밀 번 호 를 입력 하지 않 고 실행 명령 을 실행 해 야 합 니 다. expect 를 만 들 고 원 격 호출 함 수 를 실현 합 니 다.호출 방식 sshexec ip pwd cmd.나중에 못 찾 지 않 게 기록 해. 다시 해 야 돼.다른 사람들 은 필요 하면 직접 사용 할 수 있 지만 자신의 환경 에 맞 는 것 을 기억 하 세 요. 주로 expect 안의 *\# 일치 해 야 합 니 다. 이것 은 Liux 시스템 의 셸 이 고정 적 으로 표시 하 는 부분 입 니 다. 예 를 들 어 Liux - 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
}

 

좋은 웹페이지 즐겨찾기