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