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猫"