Ssh

如何通過以不同使用者身份通過 ssh 遠端傳遞參數來執行本地腳本?

  • February 20, 2019

我正在嘗試使用 keytab 身份驗證通過 ssh 在遠端伺服器上執行本地腳本。我能夠以 sachin(獲得票證的使用者)身份通過 ssh 連接到遠端,然後我以另一個使用者 remoteuser 的身份生成 bash 程序。到現在為止還挺好。這是命令

ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -l sachin sachin@remote_host 'sudo -u remoteuser /bin/bash' < ./hello.sh

當我嘗試將參數傳遞給 hello.sh 時,問題就開始了。我嘗試了以下

ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -l sachin sachin@remote_host 'sudo -u remoteuser /bin/bash' < ./hello.sh "hello"

我明白了

/bin/bash: hello: Permission denied.

但沒有參數腳本作為遠端使用者執行。所以,我認為不需要任何特殊許可。

hello.sh 是一個簡單的 shell 腳本。

#!/bin/bash
echo $1

有什麼想法嗎?

看起來好像您希望"hello"將其作為參數傳遞給腳本,但您沒有將其作為命令行參數提供給 shell。

相反,要將標準輸入上的腳本傳遞給bash,請使用bash -s. 這也允許您傳遞額外的命令行參數,例如bash -s "hello"

ssh ...options... 'sudo -u remoteuser /bin/bash -s "hello"' <./hello.sh

但是請注意,這使得 shell 的標準輸入流成為 shell 腳本,因此在腳本本身內部從標準輸入讀取數據變得很困難。

另一種選擇顯然是將腳本傳輸到遠端系統並在那裡執行。


你的命令

ssh ...options... 'sudo -u remoteuser /bin/bash' <./hello.sh "hello"

等同於

ssh ...options... 'sudo -u remoteuser /bin/bash' "hello" <./hello.sh

重定向線上路上的位置在這裡無關緊要。請參閱例如此命令如何合法?"> 文件 1 < 文件 2 貓"

引用自:https://unix.stackexchange.com/questions/501858