2

bashスクリプト内からリモートシステムで単一のsudoコマンドを実行できることを発見しました。例えば:

#!/bin/bash

ssh -t <REMOTE_IP> 'sudo ls /root'

ただし、リモートシステムのIPを含むファイルに対してループを介して同じコマンドを実行しようとすると、奇妙になり始めます。-tオプションを使用してTTYを割り当てることができないため、2つ(-t -t)を使用します。これを行うと、パスワードプロンプトが表示されます。次に、パスワードを入力しなかったときにパスワードが正しくなかったことを通知し、パスワードをエコーバックする2番目のプロンプトを表示し、Enterキーを押した後にハングします。

そのようなスクリプトの例:

#!/bin/bash

while read i
do
    ssh -t -t $i "sudo ls /root"
done < ip.list

私が見ている結果の例:

user@opensuse:~/bin> ./test.sh 
10.153.171.131

[sudo] password for user: 
Sorry, try again.
[sudo] password for user: Pa55w0rd
^CKilled by signal 2. *This is where it hangs and I have to kill it.*

説明の仕方があまりわからないので、誰かがこれに光を当てることができれば、私は最も感謝するでしょう。

ありがとう。

4

1 に答える 1

3

stdinループ内でリダイレクトしています:

while read i
do
    ssh -t -t $i "sudo ls /root"
done < ip.list

これは、(ssha)TTYに接続されなくなったこと、および(b)おそらく入力を食いつぶすことになることを意味します。理想的には、入力をsshにリダイレクトし、TTYを必要としないように/dev/null構成します。sudoただし、次のことを試すことができます。

ssh -t $i "sudo ls /root" < /dev/tty
于 2012-08-16T02:04:17.883 に答える