Làm cách nào tôi có thể cung cấp mật khẩu SSH cho SVN trên dòng lệnh?


8

Trong trường hợp của tôi, tôi muốn thực hiện kiểm tra SVN:

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

Tuy nhiên, tôi muốn có mật khẩu trong một dòng đó để nó không bật lên.


1
Chỉ cần một cảnh báo nhanh - tên người dùng và mật khẩu của bạn sẽ được hiển thị cho MỌI NGƯỜI có quyền truy cập vào máy đó. Chỉ cần một lệnh "ps -elf" đơn giản sẽ hiển thị dòng lệnh đầy đủ. Nói chung, đây không phải là một ý tưởng bảo mật tốt, và tại sao svn và các công cụ như nó lại nhắc mật khẩu. Không phải là bạn không thể làm điều đó nếu bạn kiểm soát ai có quyền truy cập hệ thống, chỉ không muốn mọi người nghĩ rằng họ nên làm điều này nói chung.
Jared

Câu trả lời:


12

svn co svn + ssh: // tên người dùng: password@10.106.191.164/home/svn/shproject


+1 để trả lời câu hỏi và không chỉ cung cấp giải pháp thay thế (xứng đáng mặc dù chúng có thể).
briealeida

@briealeida - Tôi chỉ muốn nó hoạt động: theo thử nghiệm trong bài viết của tôi dưới đây , có vẻ như nó không hoạt động, vì một dấu nhắc mật khẩu xuất hiện dù sao đi nữa; cùng một bài viết chứa một giải pháp với sshpass(mà không làm việc cho tôi).
sdaau

Như đã nói ở trên, điều này không thực sự hoạt động.
Jonny

Mở rộng: nó có thể sẽ hoạt động miễn là ssh không yêu cầu mật khẩu, trong hầu hết các trường hợp, nó sẽ yêu cầu mật khẩu.
Jonny

16

Cho rằng bạn đang sử dụng SSH, cách ưa thích là sử dụng khóa chung để ủy quyền, giúp tiết kiệm hoàn toàn nhu cầu về mật khẩu.

Hướng dẫn tạo và cài đặt các phím có thể được tìm thấy ở đây .


Tất nhiên, nếu bạn muốn khóa của mình thực sự an toàn, bạn nên cung cấp cho nó một cụm từ thông qua. : /
Cướp

7

Vô cùng tốt hơn là tạo ra một cặp khóa. Là người dùng cục bộ của bạn:

$ ssh-keygen -t rsa

(chấp nhận mọi mặc định)

Sau đó lấy nội dung của .ssh / id_rsa.pub và thêm nó vào máy chủ từ xa vào .ssh / ủy quyền_key Hãy chắc chắn rằng tất cả được dán vào cùng một dòng. Ngoài ra, hãy chắc chắn rằng các quyền của thư mục .ssh là 600.

Sau đó, bạn sẽ có thể ssh mà không cần được nhắc nhập mật khẩu.


"Quyền của ~ / .ssh trên máy chủ phải là 700. Tệp ~ / .ssh / ủy quyền (trên máy chủ) được cho là có chế độ 600. Quyền của khóa (riêng tư) ở phía máy khách nên là 600. " Askubfox.com/a/46425
Jonny

6

Thay vì sử dụng mật khẩu, bạn có thể muốn xem cặp khóa riêng / chung và sử dụng ssh. hầu hết các bản phân phối linux đi kèm với các lệnh dễ sử dụng để tạo một cặp như vậy. tuy nhiên điều này sẽ yêu cầu truy cập ti phía máy chủ (một lần) để gửi tệp khóa công khai trong tệp ~ / .ssh / ủy quyền của người dùng của bạn.


3

Chà, tôi thực sự muốn nhập mật khẩu - tôi không muốn dựa vào mật khẩu của mình được lưu ở đâu đó; tuy nhiên, tôi muốn nhập nó một lần cho mỗi bộ lệnh svn + ssh; và thông thường, bạn chỉ muốn thực hiện một svn checkout- và phải nhập hàng tấn mật khẩu. Đó là trong trường hợp như vậy tôi chỉ muốn nhập mật khẩu một lần.

Vì vậy, chỉ có câu trả lời của @Boinst@Marius có liên quan đến trường hợp sử dụng của tôi; Thật không may, họ đã không giúp đỡ, vì tôi không thể khiến họ làm việc. Tôi tự hỏi nếu chính các tác giả bài viết đã thử các lệnh trước khi đăng chúng, vì bây giờ tôi không thể tưởng tượng được chúng có thể hoạt động như thế nào - đây là một thử nghiệm tôi đã thực hiện trên PC Ubuntu 10.04 của mình (và tôi đã phá vỡ bằng Ctrl-C, mỗi lần tôi nhìn thấy nhắc mật khẩu xuất hiện):

$ 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

Theo như --username/--passwordtrên svndòng lệnh là có liên quan - đó không quan trọng với svn+ssh, bởi vì nó sshhỏi, không svn:

svn - Subversion bỏ qua các tùy chọn "--password" và "--username" - Stack Overflow

Lời nhắc bạn nhận được không giống như Subversion yêu cầu bạn nhập mật khẩu, có vẻ như ssh yêu cầu mật khẩu.

Ngoài ra, như nhật ký hiển thị, sshchính nó không chấp nhận " username:password@..." trong URL - và do đó cũng không svn. Tại sao chỉ chấp nhận sử dụng tên người dùng trong URL trong svn, có thể được giải thích trong ~/.subversion/config:

### (Nếu URL bao gồm tên người dùng, thì tên máy chủ sẽ được
### được chuyển cho tác nhân đường hầm là @.)

Thông báo không có gì được nói về <user>:<pass>@<hostname>.

Bây giờ, nhờ vào trang Subversion qua SVN + SSH trên Debian , cuối cùng tôi nhận ra có một SVN_SSHbiến môi trường được sử dụng ~/.subversion/configcho đường hầm ssh (tôi đoán); và điều đó cuối cùng mở ra khả năng sử dụng chương trình sshpassđể xử lý mật khẩu theo cách một chiều như vậy:

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

Chà, ít nhất tôi cũng mừng vì cuối cùng tôi cũng tìm được một giải pháp phù hợp với mình - hy vọng điều này cũng sẽ giúp người khác,
Chúc mừng!


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

Tôi nghĩ rằng sử dụng sshpass (trong Linux) là cách tốt nhất để có được điều này.

Cài đặt sshpass

$ sudo apt-get install sshpass

Đặt biến môi trường tạm thời

$ export SSHPASS=*yourpass*

Chỉnh sửa tập tin cấu hình svn

$ nano ~/.subversion/config

Cuối cùng nhận xét thêm sshpass -evào dòng ssh, trước sshlệnh

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.