rsync บน ssh: สามารถป้อนรหัสผ่าน ssh ที่บรรทัดรับคำสั่งได้หรือไม่


3

ฉันเห็นว่าคุณสามารถสร้างคีย์ SSH เพื่อใช้ rsync ผ่าน ssh โดยไม่ต้องใส่รหัสผ่าน

แต่ฉันกำลังใช้ rsync บน ssh ใน Eclipse / ANT ซึ่งสามารถป้อนรหัสผ่านแบบโต้ตอบได้ แต่จากนั้นการโต้ตอบระหว่าง eclipse และคำสั่ง rsync ไม่ได้มีการโต้ตอบ รหัสผ่านที่ได้รับใน eclipse บนบรรทัดคำสั่ง

เป็นไปได้ไหม


1
การใส่รหัสผ่านในบรรทัดคำสั่งไม่ปลอดภัยอย่างแน่นอนเนื่องจากบรรทัดคำสั่งทั้งหมดเป็นแบบสาธารณะสำหรับทุกคนในคอมพิวเตอร์ของคุณ ( ps -ef) อย่าทำมัน
เซเว่น

จุดดีขอบคุณสำหรับสิ่งนั้น แต่นี่เป็นเพียงสคริปต์ ant ที่ทำงานบนระบบ dev ของฉันฉันคิดว่ามันมีแนวโน้มว่าจะมีใครบางคนได้รับไฟล์สำคัญที่ถูกจัดเก็บอย่างถาวรสำรองข้อมูลอัตโนมัติในเครือข่ายโดยอัตโนมัติและอาจถูกลืมกว่าคนที่รับรหัสผ่าน คำสั่ง ps ใน 5 วินาทีที่สคริปต์นี้อาจทำงาน
davidparks21

ที่จริงฉันกำลังใช้คาดว่าจะจัดการส่วนรหัสผ่านแบบโต้ตอบของมันฉันคิดว่านี่อาจเป็นคำตอบที่ดีที่สุด แต่ฉันพบเจอสิ่งกีดขวางระหว่างทาง
davidparks21

1
คุณสามารถป้องกันไฟล์คีย์ของคุณด้วยรหัสผ่านและคุณสามารถใช้ ssh-agent เพื่อเปิดคีย์สำหรับเซสชันการเขียนโปรแกรมของคุณ
เซเว่น

คำตอบ:


3

หลังจากการสู้รบระหว่างฉันกับคอมพิวเตอร์ในที่สุดฉันก็ได้รับคำตอบที่ไม่ได้กล่าวถึงในบทความใด ๆ ที่ฉันสามารถหาได้ ฉันจะโพสต์บล็อกเกี่ยวกับเรื่องนี้

วิธีแก้ไขคือใช้คุณสมบัติใหม่ที่แก้ไขในรุ่นอัลฟ่าของ 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"

ครั้งแรกที่เราreadstdin varลงในตัวแปร จากนั้นเราจะexpectดำเนินการบางอย่างซึ่งต้องมีการโต้ตอบกับผู้ใช้: sudoในกรณีนี้ เมื่อsudoพร้อมท์ให้เราใส่รหัสผ่านเราจะส่งรหัสผ่านนั้นจากตัวแปรที่เก็บไว้varและwaitเพื่อให้กระบวนการเสร็จสมบูรณ์


0

เนื่องจากคุณรู้จักทั้งสองเครื่องคุณจึงสามารถเพิกเฉยรหัสผ่านจากผู้ใช้แต่ละคนได้อย่างปลอดภัยแล้วจึง:

  1. ให้สิทธิ์ sudo แก่ผู้ใช้ rsync เพื่อ rsync เพื่อให้พวกเขาสามารถเข้าถึงทุกสิ่ง

  2. การตั้งค่าคีย์ส่วนตัว / การเข้าสู่ระบบแบบไม่ใช้รหัสผ่านโดยใช้ผู้ใช้ rsync จากเครื่องระยะไกลและเรียกใช้ rsync ด้วย sudo ผ่าน ssh

วิธีนี้รหัสผ่านจะไม่สำคัญและคุณจะปลอดภัยมากขึ้น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.