쉘 코드를 Python 구조 코드로 마이그레이션하려고 합니다. 내가 겪고 있는 문제는 Python이 원격 Linux 호스트에서 루트를 사용하여 명령을 실행할 수 없다는 것입니다. 누구든지 이 문제에 직면하여 해결할 수 있습니까? 당신의 도움에 정말 감사드립니다. 미리 감사드립니다.
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.
. 현재 상태에서는 두 문자 10
와 한 문자(와일드카드)를 한 줄에 여러 번 일치합니다. .
어쩌면 10\.
(3개의 리터럴 문자와 일치) 또는 짝수 ^10\.
(줄 시작 부분의 3개의 리터럴 문자와 일치)여야 할 수도 있습니다. 여기서는 10.
줄 시작 부분에 있는 세 개의 리터럴 문자를 참조하고 있다고 가정합니다 .
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