他のユーザーに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は単純なシェルスクリプトです。

#!/bin/bash
echo $1

何が問題なのかご存知ですか?

ベストアンサー1

スクリプトに引数として渡したいようですが、"hello"シェルにコマンドライン引数として提供しません。

代わりに標準入力にスクリプトを渡すにはをbash使用しますbash -s。また、次の追加のコマンドライン引数を渡すこともできますbash -s "hello"

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

ただし、これにより、シェルの標準入力ストリームがシェルスクリプトになり、スクリプト自体内の標準入力からデータを読み取ることが困難になります。

明らかに別のオプションは、スクリプトをリモートシステムに転送してそこで実行することです。


注文

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

そして

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

ここでは、回線のリダイレクト位置は重要ではありません。たとえば、参照してください。このコマンドはどのように合法ですか? ">ファイル1 <ファイル2猫"

おすすめ記事