หลังจากการสู้รบระหว่างฉันกับคอมพิวเตอร์ในที่สุดฉันก็ได้รับคำตอบที่ไม่ได้กล่าวถึงในบทความใด ๆ ที่ฉันสามารถหาได้ ฉันจะโพสต์บล็อกเกี่ยวกับเรื่องนี้
วิธีแก้ไขคือใช้คุณสมบัติใหม่ที่แก้ไขในรุ่นอัลฟ่าของ ant 1.8.3 เท่านั้นซึ่งดูเหมือนจะเป็นตัวแก้ไขข้อบกพร่องของรุ่นที่วางจำหน่าย 1.8.2 ดังนั้นจึงอาจมีความเสถียรพอแม้กับชื่ออัลฟ่า คุณสมบัติดังกล่าวช่วยให้คุณสามารถส่งผ่านข้อมูลไปยัง STDIN ของสคริปต์คือรหัสผ่าน จากนั้นคุณสามารถใช้เครื่องมือ linux มาตรฐานหรือ cygwin บน windows เพื่อread
ใช้รหัสผ่านในการปิด STDIN และใช้เป็นตัวแปร
ไม่มีการพึ่งพาไม่มีไฟล์คีย์ไม่มีรหัสผ่านที่รั่วไหลในบรรทัดคำสั่งไม่มีรหัสผ่านที่เก็บไว้ ในที่สุดฉันก็เห็นแสงสว่างบางอย่างที่เกินความมืดมนอันน่าเศร้าที่ฉันเผชิญในไม่กี่วัน
นี่คือภารกิจ ANT ที่ทำสิ่งนี้:
<input message="Enter username for ${website.host}:" addproperty="host.username" />
<input message="Enter password for ${website.host}:" addproperty="host.password" />
<sshexec host="${website.host}" trust="true"
username="${host.username}" password="${host.password}"
inputstring="${host.password}"
command='read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"' />
บันทึกบรรทัดคำสั่ง:
read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"
ครั้งแรกที่เราread
stdin var
ลงในตัวแปร จากนั้นเราจะexpect
ดำเนินการบางอย่างซึ่งต้องมีการโต้ตอบกับผู้ใช้: sudo
ในกรณีนี้ เมื่อsudo
พร้อมท์ให้เราใส่รหัสผ่านเราจะส่งรหัสผ่านนั้นจากตัวแปรที่เก็บไว้var
และwait
เพื่อให้กระบวนการเสร็จสมบูรณ์
ps -ef
) อย่าทำมัน