簡體   English   中英

如何通過 ssh sudo 運行本地腳本

[英]How to sudo run a local script over ssh

我嘗試通過 ssh sudo 運行本地腳本,

ssh $HOST < script.sh

我試過

ssh -t $HOST "sudo -s && bash" < script.sh

實際上,我在谷歌上搜索了很多,找到了一些類似的問題,但是,我沒有找到可以 sudo 運行本地腳本的解決方案。

讀取錯誤信息

$ ssh -t $HOST "sudo -s && bash" < script.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.

很清楚這里出了什么問題。

在將腳本重定向到遠程會話的 bash 標准輸入時,您不能使用 ssh 參數-tsudo需要要求輸入密碼)。

如果您可以接受,您可以通過scp將本地腳本傳輸到您的遠程機器,然后執行腳本而無需 I/O 重定向:

scp script.sh $HOST:/tmp/ && ssh -t $HOST "sudo -s bash /tmp/script.sh"

解決問題的另一種方法是在非交互模式下使用sudo -n但為此您需要在遠程機器的 sudoers 文件中為執行用戶設置NOPASSWD 然后你可以使用

ssh $HOST "sudo -n -s bash" < script.sh

為了使 Edward Itrich 的答案更具可擴展性並適合頻繁使用,您可以設置一個系統,在該系統中只運行一行腳本,該腳本可以通過以下方式快速移植到任何主機、文件或命令:

如果您有一個腳本,請在您的 Scripts 目錄中創建一個腳本,方法是更改​​您想要的腳本名稱(我經常使用這種格式來更改腳本名稱的 1 個單詞並創建文件、設置權限並打開以進行編輯):

newscript="runlocalscriptonremotehost.sh"
touch $newscript && chmod +x $newscript && nano $newscript

在nano中填寫腳本如下,將要遠程運行的腳本的目錄和名稱信息放在runlocalscriptonremotehost.sh的變量行中(只需要編輯第1-3行):

HOSTtoCONTROL="sudoadmin@192.168.0.254"
PATHtoSCRIPT="/home/username/Scripts/"
SCRIPTname="scripttorunremotely.sh"
scp $PATHtoSCRIPT$SCRIPTname $HOSTtoCONTROL:/tmp/ && ssh -t $HOSTtoCONTROL "sudo -s bash /tmp/$SCRIPTname"

然后運行:

sh ./runlocalscriptonremotehost.sh

在選項卡式文本編輯器中保持runlocalscriptonremotehost.sh打開以進行快速更新,繼續為腳本創建 bash 別名,您將擁有此常用操作的應用程序版本。

首先,將您的目標分為兩部分。 1) SSH 到主機。 2)以sudo身份運行您想要的命令。 在確定您可以 1) 訪問主機和 2) 擁有 sudo 權限后,您可以將這兩個命令與&&結合使用。 什么x_cmd && y_cmd確實是, y_cmd之后被執行x_cmd已成功退出。

暫無
暫無

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

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