ฉันจะให้รหัสผ่าน SSH กับ SVN ในบรรทัดคำสั่งได้อย่างไร


8

ในกรณีของฉันฉันต้องการชำระเงิน SVN:

svn co svn+ssh://10.106.191.164/home/svn/shproject

อย่างไรก็ตามฉันต้องการมีรหัสผ่านในหนึ่งบรรทัดเพื่อไม่ให้ปรากฏขึ้น


1
เพียงแค่คำเตือนอย่างรวดเร็ว - ชื่อผู้ใช้และรหัสผ่านของคุณจะถูกเปิดเผยต่อใครก็ตามด้วยการเข้าถึงเครื่องดังกล่าว เพียงแค่คำสั่ง "ps -elf" แบบง่ายจะแสดงบรรทัดคำสั่งแบบเต็ม โดยทั่วไปนี่ไม่ใช่ความคิดที่ดีเกี่ยวกับความปลอดภัยและเหตุใด svn และเครื่องมือเช่นนั้นจึงขอรหัสผ่าน ไม่ใช่ว่าคุณไม่สามารถทำได้หากคุณควบคุมผู้ที่สามารถเข้าถึงระบบได้ แต่ไม่ต้องการให้คนอื่นคิดว่าพวกเขาควรทำสิ่งนี้โดยทั่วไป
Jared

คำตอบ:


12

svn co svn + ssh: // ชื่อผู้ใช้: password@10.106.191.164/home/svn/shproject


+1 สำหรับการตอบคำถามไม่ใช่เพื่อเสนอทางเลือกเท่านั้น
briealeida

@Briealeida - ฉันแค่หวังว่ามันจะทำงานได้: ตามการทดสอบในโพสต์ของฉันด้านล่างดูเหมือนว่ามันไม่ทำงานเนื่องจากพรอมต์รหัสผ่านปรากฏขึ้นอย่างไรก็ตาม โพสต์เดียวกันมีโซลูชันด้วยsshpass(ซึ่งใช้งานได้สำหรับฉัน)
sdaau

ดังที่ได้กล่าวมาแล้วสิ่งนี้ไม่ได้ผล
จอนนี่

ขยาย: มันอาจจะทำงานได้ตราบใดที่ ssh ไม่ได้ขอรหัสผ่านซึ่งมันจะเป็นกรณีส่วนใหญ่
Jonny

16

ระบุว่าคุณกำลังใช้ SSH วิธีที่ต้องการคือใช้รหัสสาธารณะสำหรับการให้สิทธิ์ซึ่งจะช่วยประหยัดความต้องการของรหัสผ่านโดยสมบูรณ์

คู่มือสำหรับการสร้างและติดตั้งกุญแจสามารถพบได้ที่นี่


แน่นอนถ้าคุณต้องการให้กุญแจของคุณปลอดภัยจริงๆคุณควรให้วลีรหัสผ่าน : /
Rob

7

อนันต์ดีกว่าคือการสร้าง keypair ในฐานะผู้ใช้ในพื้นที่ของคุณ:

$ ssh-keygen -t rsa

(ยอมรับค่าเริ่มต้นทั้งหมด)

จากนั้นนำเนื้อหาของ. ssh / id_rsa.pub และเพิ่มลงในเซิร์ฟเวอร์ระยะไกลไปยัง. ssh / authorized_keys ให้แน่ใจว่ามันถูกวางทั้งหมดในบรรทัดเดียวกัน ตรวจสอบให้แน่ใจด้วยเช่นกันว่าการอนุญาตของไดเรกทอรี. ssh คือ 600

จากนั้นคุณควรจะสามารถ ssh ได้โดยไม่ต้องใส่รหัสผ่าน


"การอนุญาตของ ~ / .ssh บนเซิร์ฟเวอร์ควรเป็น 700 ไฟล์ ~ / .ssh / authorized_keys (บนเซิร์ฟเวอร์) ควรจะมีโหมด 600 การอนุญาตของคีย์ (ส่วนตัว) บนฝั่งไคลเอ็นต์ ควรจะเป็น 600 " askubuntu.com/a/46425
จอนนี่

6

แทนที่จะใช้รหัสผ่านคุณอาจต้องการดูคู่คีย์ส่วนตัว / สาธารณะและใช้ ssh นั้น การแจกแจงลินุกซ์ส่วนใหญ่มาพร้อมกับคำสั่งที่ใช้งานง่ายเพื่อสร้างคู่ดังกล่าว อย่างไรก็ตามสิ่งนี้ต้องการการเข้าถึงด้านเซิร์ฟเวอร์ (หนึ่งครั้ง) เพื่อฝากไฟล์พับลิกคีย์ในไฟล์ ~ / .ssh / authorized_keys ของผู้ใช้


3

ดีฉันไม่ต้องการที่จะป้อนรหัสผ่าน - ฉันไม่ชอบพึ่งพารหัสผ่านของฉันถูกบันทึกไว้ที่ใดที่หนึ่ง; อย่างไรก็ตามฉันต้องการป้อนหนึ่งครั้งต่อชุดคำสั่ง svn + ssh; และบ่อยครั้งที่คุณต้องการทำอย่างใดอย่างหนึ่งsvn checkout- และต้องป้อนรหัสผ่านมากมายเลย ในกรณีเช่นนี้ฉันต้องการพิมพ์รหัสผ่านเพียงครั้งเดียว

ดังนั้นมีเพียงคำตอบของ@Boinstและ@Mariusเท่านั้นที่เกี่ยวข้องกับกรณีการใช้งานของฉัน น่าเสียดายที่พวกเขาไม่ได้ช่วยเพราะฉันไม่สามารถทำงานได้ ฉันสงสัยว่าผู้เขียนโพสต์ลองคำสั่งก่อนที่จะโพสต์หรือไม่เพราะตอนนี้ฉันนึกภาพไม่ออกว่าจะทำงานได้อย่างไร - นี่คือการทดสอบที่ทำในเครื่องบน Ubuntu 10.04 PC ของฉัน (และฉันหยุดใช้ Ctrl-C ทุกครั้งที่เห็น รหัสผ่านปรากฏขึ้น):

$ svn --version | head -1
svn, version 1.6.6 (r40053)

$ cd /tmp
$ svnadmin create myrepo
$ read -p 'ssh myself@127.0.0.1? ' PASS
ssh myself@127.0.0.1? [type _PASSWORD_, press ENTER]

## trying first with https://superuser.com/a/71479/39752 
# (specify in URL user:pass separated by colon)

## plain ssh - asks for password anyway:

$ ssh myself:$PASS@127.0.0.1
myself:_PASSWORD_@127.0.0.1's password: ^C

# svn - with just username, as expected:

$ svn co svn+ssh://myself@127.0.0.1/tmp/myrepo myrepo-wc
myself@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly

# svn - with password added to URL, asks for password anyway:

$ svn co svn+ssh://myself:$PASS@127.0.0.1/tmp/myrepo myrepo-wc
myself:_PASSWORD_@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly

# trying then with https://superuser.com/a/380426/39752, https://superuser.com/a/327822/39752
# (--non-interactive and --username/--password on command line)

# svn - asks for password anyway:

$ svn co svn+ssh://myself@127.0.0.1/tmp/myrepo --non-interactive --trust-server-cert --username myself --password $PASS --no-auth-cache
myself@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly

เท่าที่--username/--passwordเกี่ยวกับsvnบรรทัดคำสั่งที่เกี่ยวข้อง - ที่ไม่สำคัญsvn+sshเพราะมันsshถามไม่svn:

svn - การโค่นล้มโดยไม่สนใจตัวเลือก "- รหัสผ่าน" และ "- ชื่อผู้ใช้" - Stack Overflow

พรอมต์ที่คุณได้รับดูเหมือนจะไม่ถูกโค่นล้มเพื่อขอรหัสผ่านดูเหมือนว่า ssh จะขอรหัสผ่าน

นอกจากนี้เมื่อมีการบันทึกแสดงว่าsshตัวเองไม่ยอมรับ " username:password@..." ใน URL - และไม่ทำsvnเช่นนั้น เหตุใดจึงเป็นที่ยอมรับได้ที่จะใช้ชื่อผู้ใช้เท่านั้นใน URL ในsvnอาจอธิบายได้ใน~/.subversion/config:

### (หาก URL มีชื่อผู้ใช้ชื่อโฮสต์จะถูก
ส่งผ่าน ### ไปยังเอเจนต์ช่องสัญญาณเป็น @)

แจ้งให้ทราบล่วงหน้าไม่มีอะไร<user>:<pass>@<hostname>จะพูดเกี่ยวกับ

ตอนนี้ต้องขอบคุณการโค่นล้มหน้าSVN + SSH บน Debianในที่สุดฉันก็รู้ว่ามีSVN_SSHตัวแปรสภาพแวดล้อมที่ใช้ใน~/.subversion/configอุโมงค์ ssh (ฉันเดา); และในที่สุดก็เปิดโอกาสที่จะใช้โปรแกรมsshpassเพื่อจัดการรหัสผ่านในลักษณะแบบทางเดียว:

$ SSHPASS=$PASS SVN_SSH="sshpass -e ssh" svn co svn+ssh://myself@127.0.0.1/tmp/myrepo myrepo-wc
Checked out revision 0.

อย่างน้อยฉันก็ดีใจที่ในที่สุดฉันก็พบวิธีแก้ปัญหาที่เหมาะกับฉัน - หวังว่านี่จะช่วยคนอื่นด้วยเช่นกัน
ไชโย!


2
svn co svn+ssh://10.106.191.164/home/svn/shproject --non-interactive --trust-server-cert --username <username> --password <password> --no-auth-cache

1

นอกจากนี้คุณยังสามารถใช้สวิทช์ได้รับชื่อผู้ใช้และรหัสผ่าน

อ้างถึงบรรทัดคำสั่งการตรวจสอบ


1

ฉันคิดว่าการใช้sshpass (ใน Linux) เป็นวิธีที่ดีที่สุดในการรับสิ่งนี้

ติดตั้ง sshpass

$ sudo apt-get install sshpass

ตั้งค่าตัวแปรสภาพแวดล้อมชั่วคราว

$ export SSHPASS=*yourpass*

แก้ไขไฟล์ svn config

$ nano ~/.subversion/config

ในที่สุดความคิดเห็นออกเพิ่มsshpass -eในบรรทัด ssh ก่อนsshคำสั่ง

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