リモートLinuxホストでrootを使用してコマンドを実行することはできません。

リモートLinuxホストでrootを使用してコマンドを実行することはできません。

シェルコードをPython構造コードに移行しようとしています。私が経験している問題は、PythonがリモートLinuxホストでrootを使用してコマンドを実行できないことです。誰でもこの問題に直面して解決できますか?あなたの助けに本当に感謝します。よろしくお願いします。

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -T -q -o UserKnownHostsFile=/dev/null \
                           -o StrictHostKeyChecking=no username@$host << EOL;
sudo su -
sed -i 's/10./172./g'/etc/hosts
EOL
done

答え1

次のように実行してみてください。

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -T -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@$host "sudo sed -i 's/10./172./g'/etc/hosts"

done

答え2

パスワードの入力を求めるsudotty デバイス (医者tty)。ssh仮想 tty デバイスは、その入力が端末からも出てくると、通常リモート側で生成されます。しかし、この場合はそうではありません。トレドック<<少し)。

RequestTTYスタイルをコピーするにはオプションを追加する必要があります。これを使用して実装するsshこともできます-t。混乱した点は、あなたが明示的に障害のあるpseudo-ttyは-Tフラグと一緒に割り当てられているので、それを置き換える必要があります。

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -t -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@$host << EOL;
sudo su -
sed -i 's/10./172./g' /etc/hosts
EOL
done

ただし、代替の一致を見たい場合があります10.。現在の状態では、2文字10と1文字(ワイルドカード)が1行に複数回一致します。.たぶん10\.(3つのリテラル文字と一致)または偶数^10\.(行の先頭の3つのリテラル文字と一致)である必要があります。ここでは10.、行の先頭にある3つのリテラル文字を参照しているとします。

TestHost1="host01 host02 host03"
for host in $TestHost1
do sshpass -p password ssh -t -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@$host sudo sed -i.bak 's/^10\./172./' /etc/hosts
done

関連情報