簡體   English   中英

使用bash在ssh中使用Expect執行sudo

[英]Execute sudo using expect inside ssh from bash

我想創建一個腳本來自動在多個Linux主機上進行安裝。 我使用ssh密鑰登錄到主機,並且在登錄名內想執行sudo,我嘗試使用Expect,我在工作站上有,但運行腳本的服務器上沒有 我該怎么做,這是我的嘗試,但是沒有運氣:

#!/bin/bash


ssh user@station04 <<EOF
expect -d -c "
send \"sudo ls\"
expect {
        \"password:\" { send '1234'; exp_continue }
        \"$user@\"{
                send "exit\r"
        }
        default {exit 1}
}"
EOF


exit

結果:

send: sending "sudo ls" to { exp0 }

expect: does "" (spawn_id exp0) match glob pattern "password:"? no
expect: read eof
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) ""
argv[0] = expect  argv[1] = -d  argv[2] = -c  argv[3] = 
send "sudo ls\r"
expect {
    "password:" { send '1234';  exp_continue }
    "@"{
        send exitr
    }
    default {exit 1}
}  
set argc 0
set argv0 "expect"
set argv ""

AK

那這個呢? <-只要確保預期的提示即可。

#!/bin/bash

expect <<'END'
spawn ssh user@station04
expect "password:"
send "$pw\r"
expect "#"
send "sudo ls\r"

END

我建議您對ssh部分使用公鑰身份驗證,然后使用類似以下內容的代碼:

ssh -t username@server-ip -C "echo sudo-password | /usr/bin/sudo -S ls"

你得到的使用expect不太對勁-不send的命令; 而是spawn命令並僅send其輸入。 因此,您的腳本變為:

ssh … <<EOF
expect -d -c "
    spawn sudo ls
    expect -nocase password: { send 1234\r }
    expect eof
"
exit
EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM