簡體   English   中英

如何使用bash腳本在遠程計算機上運行命令?

[英]How to run commands on remote machine using bash script?

我正在嘗試在遠程計算機上運行以下命令,但未執行任何操作,有人可以指出以下腳本的問題嗎?

FYI settings.yml和fuscation_util.rb文件存在於testuser帳戶中

腳本:

sshpass -p "PASSWORD" ssh -o StrictHostKeyChecking=no -T root@HOSTNAME <<EOF
    su - testuser
    NEWLINE=$'\n'
    read -s -p "Enter Presto Password:${NEWLINE}" VD_PASSWORD
    KEY=`cat settings.yml |grep '^key:'|sed 's/^key: //'`
    VALUE=`ruby fuscation_util.rb encrypt  "$KEY" "$VD_PASSWORD"`
    echo "$VALUE"
EOF

輸出:

cat: settings.yml: No such file or directory
ruby: No such file or directory -- fuscation_util.rb (LoadError)

僅當我嘗試將poutput分配給某個變量時,我才遇到錯誤,使用以下腳本我沒有得到任何錯誤

腳本:

sshpass -p "PASSWORD" ssh -o StrictHostKeyChecking=no -T root@HOSTNAME <<EOF
    su - testuser
    NEWLINE=$'\n'
    read -s -p "Enter Presto Password:${NEWLINE}" VD_PASSWORD
    cat settings.yml |grep '^key:'|sed 's/^key: //'
    ruby fuscation_util.rb encrypt  "testvalue" "testpassword"
EOF

輸出:

WORKING FINE

我相信,因為您是以root用戶身份連接的,所以連接時進入的目錄是root用戶主目錄。 即使更改用戶,您仍將位於同一起始文件夾(可能是/root )中。

如果您在執行命令之前將cd明確地插入所需的位置,則可以訪問所需的文件。

另一個選項( 由Shravan40建議 )是指定要處理的文件的絕對路徑。


還應該提到的是,允許通過SSH進行根訪問被視為安全風險。 我建議盡可能避免這種情況。

一旦ssh以root用戶身份連接到遠程主機,它將進入根目錄。 因此,請嘗試在其中的更改目錄或提供文件的絕對路徑。

雖然遠程運行命令具有安全風險。 可能您可以將腳本放在遠程主機上並傳遞參數,而不是在ssh中使用回顯。

更新:

只需在ssh之前進行所有分配,然后在調用ruby時將鍵值用作表達式即可。

嘗試這個:

read -s -p "Enter Presto Password:${NEWLINE}" VD_PASSWORD
sshpass -p "PASSWORD" ssh -o StrictHostKeyChecking=no -T root@HOSTNAME <<EOF
su - testuser
cat settings.yml |grep '^key:'|sed 's/^key: //'
ruby fuscation_util.rb encrypt  `cat settings.yml|grep '^key:'|sed 's/^key: //'` $VD_PASSWORD
EOF

除了使用完整路徑之外,您還需要用<<'EOF'替換<<EOF或所有后向滴答聲,否則它們將被發送到遠程端之前在調用方進行處理。

暫無
暫無

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

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