Cách thực hiện CVS từ xa thông qua nhiều kết nối SSH


2

Tôi biết cách sử dụng kho lưu trữ CVS từ xa nơi truy cập vào máy chủ từ xa thông qua SSH.

Đây là vấn đề của tôi: máy chủ CVS từ xa, gọi nó là "A" chỉ có thể truy cập bằng SSH từ các máy tính trong cùng mạng con. Có một máy tính "B" trên mạng con có SSH mở ra thế giới. (Đừng hỏi tại sao; Tôi không phải là quản trị viên.) Tôi có thể SSH vào "B", và sau đó SSH vào "A" nơi lưu trữ CVS.

PC nhà tôi không ở cùng mạng con với "A" và "B". Có thể truy cập kho CVS trên "A" thông qua các kết nối SSH giữa PC nhà của tôi và "B" và giữa "B" và "A" không?

  • Không lưu trữ kho CVS khác trên "B".
  • Và không cần kiểm tra "B" và đồng bộ hóa PC tại nhà của tôi với kiểm tra đó.

Câu trả lời:


3

Câu trả lời của Quack là một khởi đầu tốt, nhưng nó có hai vấn đề. Vì vậy, tôi cũng sẽ thử nó:

Trước tiên, bạn phải tạo một đường hầm từ máy trạm cục bộ của mình đến cổng SSH của máy A. Điều này được thực hiện dễ dàng từ dòng lệnh:

ssh -L 127.0.0.1:2200:A:22 B

(ssh đến B và tạo một đường hầm từ cổng cục bộ 127.0.0.1:2200 đến cổng từ xa A: 22)

Vì CVS không cho phép bạn chỉ định các cổng khi sử dụng :extgiao thức, dòng lệnh đơn giản này sẽ không đủ tốt. Những gì bạn cần làm thay vào đó là tạo hoặc sửa đổi ~/.ssh/configtệp của bạn :

Host B
   LocalForward 127.0.0.1:2200 A:22

Host tunnel2a
   Port 2200
   HostName 127.0.0.1

Đây là hai mục. Cái đầu tiên bảo ssh tạo đường hầm bất cứ khi nào bạn ssh đến B. Cái thứ hai xác định 'tên máy chủ' mới tunnel2amà bạn có thể sử dụng cho cvs.

Đầu tiên, mở đường hầm bằng cách ssh'ing đến B:

ssh B

CVS bây giờ sẽ hoạt động như thế:

cvs -d :ext:username@tunnel2a:/cvsroot/ checkout someModule

1
tuyệt vời, manni, thx cho các sửa chữa. cá nhân tôi sẽ không bao gồm mục nhập máy chủ cho "B"; Tôi có thể đặt tên cho nó là "Btunnel" và chỉ nó là "HostName B". bằng cách đó tôi chỉ nhận được đường hầm ssh Btunnelchứ không phải trên mỗi ssh B. mặt khác +1.
quack quixote

Mát mẻ. Tôi không biết về việc tự động thiết lập các đường hầm thông qua tập tin cấu hình. Cảm ơn.
Posco Grubb

1

Bạn sẽ có thể làm điều này thông qua SSH đường hầm. Tôi không có 3 máy để kiểm tra, nhưng nếu tôi hiểu đúng quy trình, bạn muốn có 2 cửa sổ đầu cuối.

Trong lần đầu tiên, SSH đến "B" với tùy chọn này : -L 1234:A:22. Điều này sẽ thêm một đường hầm giữa localhost, tại cổng 1234, thông qua máy "B", đến máy "A", tại cổng 22 (cổng SSH).

Lệnh CVS ban đầu tôi đã viết không hoạt động, vì CVS không hỗ trợ các cổng ở định dạng: ext: như tôi đã viết. Nếu sử dụng máy khách GUI IDE hoặc CVS, nó có thể cho phép bạn nhập trực tiếp một cổng thay thế. Nếu làm điều này với ứng dụng khách dòng lệnh, bạn sẽ cần một tuyến khác - thêm bí danh máy chủ vào ~/.ssh/configtệp của bạn với cổng chính xác. Câu trả lời của Manni là một ví dụ tuyệt vời cho cách thực hiện, vì vậy tôi sẽ không tái tạo nó ở đây.

Bằng cách nhắm đến cổng 1234 trên localhost, bạn sẽ truy cập vào đường hầm SSH và được chuyển đến cổng SSH trên A.

Bạn có thể muốn kiểm tra câu trả lời cho một số câu hỏi liên quan về đường hầm SSH. Cảm ơn Manni đã giúp tôi đánh bại các hướng dẫn này thành hình dạng.

Trong thiết bị đầu cuối thứ hai, hãy chạy lệnh kiểm tra CVS của bạn, nhưng thay thế localhost: 1234 cho A:

cvs -d :ext:username@localhost:1234:/cvs checkout test
# instead of
# cvs -d :ext:username@A:/cvs checkout test


Tuyệt vời! Cảm ơn bạn. Tôi có linh cảm rằng đường hầm là một phần của câu trả lời. Tôi không biết lệnh cvs của bạn có đúng không, nhưng tôi đã thiết lập đường hầm và sau đó chỉ trình khách CVS trong IDE Eclipse để sử dụng kết nối extssh với cổng localhost 1234 và các kho lưu trữ trên "A" xuất hiện. Mịn như bơ!
Posco Grubb

1
Điều này gần như đúng, nhưng không hoàn toàn. Bạn không muốn cổng mới trên B nơi mà toàn bộ từ có thể truy cập được. Bạn muốn cổng trên localhost của máy trạm cục bộ của bạn. ssh -Lsẽ thực hiện chính xác điều đó và do đó bạn cần thay đổi dòng lệnh cvs vì cvs cần kết nối với localhost chứ không phải B.
innaM

1
Oh. Ngoài ra, CVS không cho phép các cổng được chỉ định khi sử dụng SSH. Tât nhiên.
innaM

điểm công bằng. Tôi cho rằng B-> Một đường hầm sẽ không vượt qua các biện pháp bảo mật SSH tiêu chuẩn, vì vậy nó không kinh khủng . nhưng tôi đã nói sai rồi; hướng dẫn của tôi để tạo cổng trên localhost, vì vậy B:1234thực sự nên được localhost:1234. Úi. (tôi sẽ phải dùng từ của bạn cho các cổng không cho phép CVS, vì tôi không sử dụng nó.)
quackote quixote

tho tôi đã tìm thấy rất nhiều tin nhắn trên mạng đề cập đến cùng một vấn đề và cùng một giải pháp (cvs-over-ssh qua cổng thay thế): xem ví dụ danh sách.freebsd.org / pipermail / freebsd
quack quixote

0

Gặp rắc rối với câu trả lời của innaM , mặc dù nó được phát hiện và không được lặp lại ở đây, có lẽ một số thông tin bổ sung có thể giúp người dùng kỳ lạ gặp khó khăn khi thực hiện câu trả lời.

  • Trong trường hợp khó khăn, hãy chắc chắn thử nghiệm các lệnh sshcvs trên dòng lệnh trước khi đi đến điểm thêm cấu hình cho LocalForward trong tệp cấu hình . Chỉnh sửa tập tin cấu hình sớm có thể làm nản lòng nếu bất cứ điều gì về một thiết lập cụ thể hơi khác so với môi trường của người trả lời.

  • Một trong những vấn đề đầu tiên người ta có thể gặp là rất hiếm, nhưng rất quan trọng. Điều tối quan trọng là phải biết vị trí chính xác của tệp cấu hình . Trong hầu hết các trường hợp, vị trí chính xác là ~ / .ssh / config / $ {HOME} /. Ssh / config , nhưng, đôi khi không phải vậy. Vị trí tệp cấu hình chính xác được yêu cầu để giải quyết vấn đề này ngay cả khi thử nghiệm từ một dòng lệnh. Xem thêm: ssh không còn sử dụng ~ / .ssh / config

  • Ngoài ra còn có khả năng chạy afoul của các vấn đề quyền. Thông thường, an toàn trong quá trình khắc phục sự cố để đặt cả thư mục .ssh và tệp cấu hình chỉ đọc cho người dùng (ví dụ: chmod 600 ) mặc dù không nhất thiết phải có các quyền khá chặt chẽ. Trong mọi trường hợp, thư mục và tệp không được ghi bởi người dùng khác.

  • Ngoài ra còn có vấn đề thiết lập CVS_RSH đúng cách. Ngay cả khi môi trường ssh được thiết lập đúng, lệnh cvs cuối cùng sẽ thất bại với một thông báo rất không có ích nếu CVS_RSH không được chuẩn bị đúng cách.

    CVS_RSH=ssh; export CVS_RSH
    

    Nếu không có CVS_RSH , lệnh cvs có thể quay trở lại:

    -l: bad option(s)
    cvs [... aborted]: end of file from server (consult above messages if any)
    
  • Không cần thiết phải mở hai vỏ để làm việc với đường hầm. Câu trả lời của innaM nói rằng hãy thiết lập đường hầm với:

    ssh B
    

    Điều này để lại cho bạn một vỏ mở trên B, và không phải trên máy trạm cục bộ. Không cần thiết phải mở vỏ trên B. Người ta có thể hoạt động hoàn toàn trong một vỏ bằng cách thiết lập đường hầm với:

    ssh -fN B
    

    Lệnh này để lại cho bạn tại dấu nhắc hệ thống cục bộ chứ không phải tại dấu nhắc B. Thông báo trước là trong trường hợp của ssh B , có thể phá bỏ việc chuyển tiếp bằng cách đăng xuất khỏi B , trong khi đó trong trường hợp của ssh -fN B , quá trình ssh nằm trong nền và phải bị giết bởi các phương tiện khác xuống giao nhận.

  • Khi nhiều hệ thống yêu cầu số cổng thay thế, việc thêm tùy chọn Cổng vào phần Máy chủ cấu hình áp dụng là khả thi.

  • Lưu ý rằng tệp cấu hình có thể chỉ định Người dùng trong phần Máy chủ khi tên người dùng khác nhau tùy theo hệ thống.

    Một cạm bẫy tiềm năng khác có thể xảy ra trong trường hợp tên người dùng được chỉ định không chính xác. Mặc dù thường đúng và đúng khi chỉ định tên người dùng hệ thống là tên người dùng @ tên máy chủ , KHÔNG sử dụng ký hiệu này trong tệp cấu hình hoặc trong tham số ssh -L . Ví dụ, điều này sẽ trở nên sai lầm khủng khiếp và có thể rất khó để làm sáng tỏ:

    ssh -L 2200:Auser@A:22 Buser@B
    

    (Điều này không bao giờ cần sử dụng CVS vì Auser @ được chỉ định với cvs -d: ext: Auser @ A: / path / to / repository .)

    Mặc dù việc chỉ định Buser @ B là hoàn toàn chấp nhận được , Auser @ không được chỉ định theo cách này trên dòng lệnh hoặc trong tệp cấu hình . Một vấn đề lệnh cvs với một lệnh không chính xác như thế này có thể trả về một cái gì đó như:

    ssh_exchange_identification: read: Connection reset by peer
    cvs [checkout aborted]: end of file from server (consult above messages if any)
    

    Việc gỡ lỗi có thể khó khăn và có thể dẫn đến các thông báo không thể giải thích khác như:

    SSH Tunnel: channel 3: open failed: administratively prohibited
    

    Vấn đề là khi được sử dụng với -L hoặc LocalForward , Auser @ trở thành một phần của tên máy chủ (hoặc địa chỉ IP) để nó không phân giải thành địa chỉ IP dự kiến.

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.