SSH コマンドでパスワードを送信できません。パスワードエラーが発生しました。

SSH コマンドでパスワードを送信できません。パスワードエラーが発生しました。

さまざまなタスクを実行するスクリプトがありますが、何よりもユーザーにパスワードの入力を求め、パラメータに保存して次の$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を介して接続できるホストにアクセスできないため、まだ完全にテストされていません。

関連情報