
シェルコードを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
パスワードの入力を求めるsudo
tty デバイス (医者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