web-dev-qa-db-ja.com

シェルスクリプトでSudosu- <someuser>に直接パスワードを提供する方法

パスワードを要求するSudo su -<someuser>のシェルスクリプトで自動化する必要がありました。

IBMAIXサーバーのシェルスクリプトでSudosuに直接パスワードを提供する方法。 echo <password> | Sudo su -<someuser>を使用してみましたが機能しませんでした。親切にこれを手伝ってください。

1
raamsaara

-Sを使用します

man Sudo

-S、-stdinプロンプトを標準エラーに書き込み、端末デバイスを使用する代わりに、標準入力からパスワードを読み取ります。パスワードの後に​​は改行文字を続ける必要があります。

使用できるように:

echo <myPassword> | Sudo -S su <someuser>

編集:上記はUbuntuのテストでは機能しませんでした。 2番目のコマンド「su」は、パスワードの照会を求めた後に高速化するようです。

エコーされたパスワードを入力できるように1秒待つという回避策を実行しました。その後、2番目のSudoがSudo su - foobarを実行できるようになります。

echo "password" | Sudo -S sleep 1 && Sudo su - foobar
2
chloesoe

expect を使用します。 stubコマンドは次のようになります。

expect -c '
 log_user 0
 spawn /usr/bin/Sudo su - someuser
 expect "*: "
 send "thepassword\n"
 interact
'

同様の質問については この回答 を参照してください。


別のアプローチはSudo -A

  1. passなどのファイルを作成します。
  2. 自分だけがファイルにアクセスできるようにします:chmod go-rwx pass
  3. 実行可能にします:chmod u+x pass
  4. ファイルを編集して、パスワードを出力するスクリプトにします。

    #!/bin/sh
    printf '%s\n' 'yourpassword'
    
  5. 今、あなたはこれを行うことができます:

    Sudo_ASKPASS="./pass" Sudo -A su - someuser
    

注:この場合、Sudoのパスワードを指定します(suのパスワードではありません)。 Sudoが必要なものを使用します。

2

Sudoの_:NOPASSWD_オプションを使用できるので、パスワードは必要ありません。例:/ etc/sudoersの%wheel ALL=(ALL) NOPASSWD: ALL

1
danblack