さまざまなタスクを実行するスクリプトがありますが、何よりもユーザーにパスワードの入力を求め、パラメータに保存して次の$password
コマンドを実行します。
ssh [host] 'cd someDir; echo "$password" | sudo -u nobody -S <command>'
問題は、エラーが発生しSorry, try again
て接続が終了することです。
SSHを使用してsudoコマンドを実行するには?まず、リモートホストに接続してから実行すると機能します。echo 'password_string' | sudo -u nobody -S <command>
答え1
デバッグ/トラブルシューティングを試してください。現在の ssh コマンドを次に変更します。
SSH所有者'CDいくつかのディレクトリ; echo "パスワードは$passwordです。"'
あなたは得るでしょう
パスワードは今試してみてください
エコ 所有者'CDいくつかのディレクトリ; echo "パスワードは$passwordです。"'あなたは得るでしょう
所有者CDいくつかのディレクトリ; echo "パスワードは$passwordです。"
sshコマンドは$password
二重引用符で囲み、一重引用符で囲みます。まあ、これは二重引用符を単純な一般的な文字に変換します。LDQ
入力と比較して構文的に重要ではなく、単一引用符で効果的に囲みますRDQ
。$password
代わりに$password
リモートホストに送信されます。値($password
つまり、実際のパスワード)。その後、リモートホストのシェルは$password
値を拡張しようとしますが、変数がまだシェルに設定されていないため、何も取得されません。
可能な有効なコマンドは次のとおりです。
SSH所有者'CDいくつかのディレクトリ;エコ"'" $password "'" sudo -u 誰も-S注文する'
明確にするためのスペースを追加して確認しましょう。
... '...;echo "'"$password"'"|sudo..."
一重引用符の中にはまだ二重引用符があります。ただし、リテラル二重引用符(後ろecho
)を指定した後は、一重引用符を破るそのため、ローカルコマンドで変数の拡張/交換が発生する可能性があります。次に$password
二重引用符で囲みます。その後、コマンドの2番目の二重引用符、パイプ(|
)、一重引用符に戻ります。sudo
警告:現在SSHを介して接続できるホストにアクセスできないため、まだ完全にテストされていません。