2010-04-01 41 views
7

Giả sử rằng tôi không thể chạy một cái gì đó như thế này với Vải:vải và svn mật khẩu

run("svn update --password 'password' .")

thế nào là cách đúng đắn để vượt qua để Vải mật khẩu cho dòng lệnh tương tác từ xa?

Vấn đề là các repo được kiểm tra ra như svn + ssh và tôi không có một http/https/svn tùy chọn

Trả lời

7

Dùng thử SSHkey. Nó cho phép bạn kết nối với máy chủ mà không cần mật khẩu. Trong trường hợp này, bạn sẽ phải thiết lập một sshkey giữa máy chủ từ xa và repo.

Tại máy chủ từ xa: Tạo cặp khóa

$ ssh-keygen -t dsa 

Rời khỏi passphase trống! này sẽ tạo ra 2 file

  • ~/.ssh/id_dsa (private key)
  • ~/.ssh/id_dsa.pub (public key)

Sau đó, thêm các nội dung trong id_dsa .pub đến ~/.ssh/authorized_keys tại máy chủ repo.

Máy chủ từ xa của bạn sẽ có thể cập nhật cây nguồn mà không cần bất kỳ mật khẩu nào.

+0

với hy vọng ai đó đang xem ... - không để lại cụm mật khẩu trống rỗng một ý tưởng tồi? – rutherford

+1

có, cụm từ mật khẩu trống không tốt nói chung - nhưng không tệ hơn việc đặt mật khẩu vào tập lệnh - và trong trường hợp này, nếu cụm mật khẩu không trống, bạn cần nhập tập lệnh mật khẩu SSH thay vì từ xa mật khẩu để nó sẽ không thực hiện được nhiều nếu có. –

0

Bạn có thể cần phải cung cấp cho người sử dụng không? Nếu không, bạn có thể có may mắn hơn xuất khẩu repo của bạn và làm một tar của nó (cục bộ) để tải lên + triển khai trên máy chủ. Nếu bạn chạy lệnh svn cục bộ, bạn sẽ có thể được nhắc nhập tên người dùng và/hoặc mật khẩu của bạn.

+0

tôi đã cố gắng cung cấp công tắc --username là tốt, mà không cần bất kỳ may mắn. – hyperboreean

2

Chúng tôi đã gặp sự cố tương tự như vậy trong khi quay lại và thực sự đề xuất tính năng mới cho Fabric, nhưng nhà phát triển chúng tôi đã đề cập đến đề xuất này thay thế.

import getpass 
password = getpass.getpass('Enter SVN Password: ') 
run("svn update --password '%s'" % password) 

Điều này sẽ nhắc bạn nhập mật khẩu khi đến lúc vải chạy lệnh này.

Tôi tin rằng sẽ hiển thị mật khẩu của bạn trong nhật ký vải, do đó, một tùy chọn tốt hơn là để SVN nhắc bạn nhập mật khẩu và lặp lại mật khẩu vào đó.

run('echo %s | svn update --password' % password) 

Tôi không sử dụng SVN, vì vậy tôi e rằng tôi không chắc liệu điều đó có thể thực hiện được hay không. Tôi hy vọng một người khác có thể giúp đỡ ở đó!

+0

Như tôi đã nói ở trên cập nhật svn - mật khẩu không hoạt động chút nào, vì các tùy chọn đó chỉ dành cho http/https. – hyperboreean

+0

Điều tôi đang tìm kiếm là cách tự động truyền mật khẩu tương tác. – hyperboreean

+0

Vâng, việc lặp lại các lệnh của bạn vào SVN có thể vẫn đáng để đi. Bạn sẽ có thể lặp lại mật khẩu vào dấu nhắc tương tác, nhưng số dặm của bạn có thể thay đổi. – mac

2

Câu trả lời chuẩn để tự động hóa các dòng lệnh tương tác là "sử dụng Mong đợi", nhưng bạn đang sử dụng Python, vì vậy tôi sẽ tinh chỉnh một chút để "sử dụng Pexpect".

Có thể mất một chút suy nghĩ để tích hợp Pexpect trong Fabric, hoặc có lẽ bạn sẽ chỉ dừng lại để Pexpect một mình cho trường hợp cụ thể này. Nhưng đó chắc chắn là cách tôi sẽ đi.

0

Bạn nên xem qua số Fabric's env documentation. Ở đó, bạn nên tạo một cái gì đó như thế này:

from fabric.api import env 

env.user = 'your_user' 
env.password = 'your_password' 

Hy vọng điều đó sẽ hữu ích!

3

Nếu yout chỉ muốn giấu mật khẩu từ nhật ký, bạn có thể sử dụng một cái gì đó như thế này:

from fabric.state import output 

def xrun(command, hidden='', *args, **kwargs): 
    old_state = output.running 
    output.running = False 
    print '[%s] run: %s' % (env.host_string, command) 
    run(command + hidden, *args, **kwargs) 
    output.running = command 

xrun('svn update', '--password "your password"') 
Các vấn đề liên quan