簡體   English   中英

使用SSH通過帶密碼的命令發送命令

[英]Transmit commands via ssh with password using expect

我需要在一系列服務器上進行迭代(許多類型的服務器,每種類型的服務器存儲在單獨的文件中),在它們上運行一些命令(根據服務器類型存儲在不同的文件中),並將輸出記錄在本地計算機上,使用ssh和密碼。 由於sshpass,ssh密鑰身份驗證不是我的情況的解決方案,請不要推薦它們。

這是我的代碼:

#!/usr/local/bin/expect -f
#Set path to nodes files
NODES=nodes/*
#Set path to commands files
CMD=commands/*

for fn in $NODES
do
echo "Working in $fn"
    for fc in $CMD
    do
    echo "Working in $fc"
        if [ ${fn:6:3} = ${fc:9:3} ]
        then
            # read Nodes from file
            while read fn_line; do
                #extracting substrings of user, host, password separated by comma
                IFS=', ' read -a uhp <<< $fn_line
                #establish ssh session to the node
                eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no ${uhp[0]}@${uhp[1]}
                echo ${uhp[0]} ${uhp[1]} ${uhp[2]}
                #use correct prompt
                set prompt "assword:*"
                interact -o -nobuffer -re $prompt return
                send "${uhp[2]}\r"
                set prompt ":|#|\\\$"
                interact -o -nobuffer -re $prompt return
                #execute and logging HC commands on the node
                while read fc_line; do
                    #set prompt ":|#|\\\$"
                    #interact -o -nobuffer -re $prompt return
                    echo "$fc_line\r" >> logs/${fn:6:3}.log
                    $fc_line\r >> logs/${fn:6:3}.log
                    #interact -o -nobuffer -re $prompt return
                done < $fc
            done < $fn
        fi
      #cat $f
    done
done

我知道我的代碼中的問題是bash和期望解釋器的組合。 請幫助我僅以期望的方式進行操作,或者告訴我如何將bash與期望結合起來。 另一個問題是建立ssh連接后的時間,但是我認為可以通過將它先前存儲在數組中並在建立ssh連接后遍歷它來解決。

怎么樣編寫一個期望生成ssh命令的小實用程序:

#!/usr/bin/expect
set HOST [lindex $argv 0]
set PORT [lindex $argv 1]
set USER [lindex $argv 2]
set PASSWORD [lindex $argv 3]
set COMMAND [join [lrange $argv 4 end] " "]
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -p $PORT $USER@$HOST $COMMAND
expect "assword:"
send "$PASSWORD\r"
expect eof
exit

並在Bash腳本中使用它,如下所示:

ssh-util <host> <port> <user> <pass> <command>
e.g.
ssh-util 10.0.0.10 22 root s3cr3t ls -la 

暫無
暫無

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

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