원격 Linux 호스트에서 루트를 사용하여 명령을 실행할 수 없습니다.

원격 Linux 호스트에서 루트를 사용하여 명령을 실행할 수 없습니다.

쉘 코드를 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

비밀번호를 묻는 메시지를 표시 하려면 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.. 현재 상태에서는 두 문자 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

관련 정보