Bash 자동 로그인 스크립트에서 두 번째 사례를 지정합니다.

Bash 자동 로그인 스크립트에서 두 번째 사례를 지정합니다.

두 번째 케이스를 추가하는 데 문제가 있습니다. 나는 컴퓨터에 로그인하여 명령을 실행하기 위해 이 작은 스크립트를 작성했습니다. 하지만 명령에 대한 바로가기를 정의하는 데 문제가 있습니다. 예를 들어 다음과 같아야 합니다.

./script.sh 44 - SSH를 통해 이 컴퓨터에 로그인합니다(작동).

./script.sh 44 r - SSH를 통해 이 컴퓨터를 다시 시작합니다(두 번째 사례를 정의하는 데 문제가 있기 때문에 작동하지 않습니다).

그래서 테스트를 위해 다음과 같이 썼습니다.

LOG="$LOG""$AUT""$NMBR""$NR""$DOMAIN" "$Command"
        $LOG

변수를 정의하고

$Command
Command="sudo reboot"

그런데 이 명령이 컴퓨터에서는 실행되지 않습니다. 제가 뭘 잘못하고 있는 걸까요?

아래에 전체 스크립트를 넣었습니다.

DOMAIN="domain.domain.com"
PASS1="pass"
AUT="auth"
NMBR="001010"
LOG="sshpass -p$PASS1 ssh user@"
Command="sqlite3 /bin/ade/activity.sqlite 'Delete from state'"

if [[ $# == 0 ]]; then
    echo "Invalid script call, give location or number as parameter:"
    echo "2  / plau -    NR 2 / Pn | I don't think it exists ?"
    echo "44 / neun -    NR 00101044 / Neundorf"
    echo "45 / aks -     NR 00101045 / Anton-Kraus-Straße"
    echo "46 / chamiss - NR 00101046 / Chamissostraße"
    echo "47 / prei -    NR 00101047 / Preißelpöhl"
    echo "48 / sud -     NR 00101048 / Südvorstadt"
    echo "49 / capitol - NR 00101049 / Capitol"
    echo "50 / kgs -     NR 00101050 / Dr.-Karl-Gelbke-Straße"
    echo "51 / reusa -   NR 00101051 / Reusa"
    echo "52 / haus -    NR 00101052 / Seehaus"
    echo "53 / bus -     NR 00101053 / Busbahnhof"
    echo "54 / kn -      NR 00101054 / Knielohstraße"
    echo "55 / seume -   NR 00101055 / Seumestraße"
    echo "56 / neuels -  NR 00101056 / Neue Elsterbrücke"
    echo "57 / haupt -   NR 00101057 / Hauptfriedhof"
    echo "58 / tunnel2 - NR 00101058 / Tunnel II (Stadtgalerie)"
    echo "59 / hlp -     NR 00101059 / Hans-Löwel-Platz"
    echo "60 / tunnel4 - NR 00101060 / Tunnel iV (PSB-Service)"
    exit 1;
    
else

    case  in
        "44") NR="0001"; LOGY="sshpass -p$PASS1 ssh mtvm@$AUT$NR$DOMAIN" ;;
        "45") NR="45" ;;
        "46") NR="46" ;;
        "47") NR="47" ;;
        "48") NR="48" ;;
        "49") NR="49" ;;
        "50") NR="50" ;;
        "51") NR="51" ;;
        "52") NR="52" ;;
        "53") NR="53" ;;
        "54") NR="54" ;;
        "55") NR="55" ;;
        "56") NR="56" ;;
        "57") NR="57" ;;
        "58") NR="58" ;;
        "59") NR="59" ;;
        "60") NR="60" ;;
        
        "neun") NR="0001"; LOG2="sshpass -p$PASS1 ssh mtvm@$AUT$NR$DOMAIN" ;;
        "aks") NR="45" ;;
        "chamiss") NR="46" ;;
        "prei") NR="47" ;;
        "sud") NR="48" ;;
        "capitol") NR="49" ;;
        "kgs") NR="50" ;;
        "reusa") NR="51" ;;
        "haus") NR="52" ;;
        "bus") NR="53" ;;
        "kn") NR="54" ;;
        "seume") NR="55" ;;
        "neuels") NR="56" ;;
        "haupt") NR="57" ;;
        "tunnel2") NR="58" ;;
        "hlp") NR="59" ;;
        "tunnel4") NR="60" ;;
        *) echo "Incorrect parameter"; exit 1 ;;
        
        esac

            echo "Login on $LOG$AUT$NMBR$NR$DOMAIN"
            
        LOG="$LOG""$AUT""$NMBR""$NR""$DOMAIN" "$Command"
        $LOG
        
        LOG2="$LOG2"
        $LOGY
        
fi

답변1

이것은 혼란스럽게 읽혀집니다. 우리한테 보여주지 그래?어디당신은 문제가 있습니까? 이 스크립트에 사이에 값이 누락되어 case in있고 두 줄의 LOG가 있다는 사실은 두 개의 SSH 로그인을 순차적으로 수행한다는 것을 나타냅니다.

이 줄도 작동하지 않습니다. 할당된 값은 공백으로 묶어야 합니다. 이렇게 하면 Bash가 실행을 위해 로컬 환경을 $Command사용해야 한다고 생각하게 됩니다.LOG=...

LOG="$LOG""$AUT""$NMBR""$NR""$DOMAIN" "$Command"

아마도 그래야 할 것이다

LOG="$LOG$AUT$NMBR$NR$DOMAIN $Command"

LOG혼란을 재정의하는 대신 다음을 수행하십시오.

$LOG$AUT$NMBR$NR$DOMAIN $Command

모든 변수를 완전히 제거하는 것이 좋습니다 LOG*. 읽기가 쉽지 않습니다. 왜 다른 사람이 호출되는 명령을 구성하도록 합니까? LOGY와 LOG2는 모두 호스트 NR 0001에 대해서만 설정되지만 첫 번째는 인수가 숫자인 경우에만 설정되고 다른 하나는 인수가 문자열 식별자인 경우에만 설정됩니다. 호스트의 사용자만 다른가요? 그렇다면 user=mtvm거기에서 사용하는 것은 어떨까요 ?

어쨌든, 대본으로 써야 한다면 대략 이 정도쯤 쓸 것 같아요. 다른 경우/esac에 "sudo restart"를 추가했습니다.

# ... declare vars PASS1, DOMAIN, etc.
user=$(whoami)

# your argument checks and help output here

case $1 in
  neun ) shift; set -- 0001 "$@" ;;
  # other cases
esac

case $1 in
  0001 ) NR="$1"; user=mtvm ;;
  # other cases
esac

if [ $# -eq 2 ]; then
  case "$2" in r ) command="sudo reboot" ;; esac
fi

if [ -n "${command-}" ]
then
  sshpass -p$PASS1 ssh $user@$AUT$NR$DOMAIN $command
else
  sshpass -p$PASS1 ssh $user@$AUT$NR$DOMAIN
fi

호스트 이름이 aut0001domain.domain.com잘못된 것처럼 보인다고 가정하지만 그게 바로 그 일입니다.

관련 정보