Ssh
如何通過以不同使用者身份通過 ssh 遠端傳遞參數來執行本地腳本?
我正在嘗試使用 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 貓"