[英]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.