2012-04-26 24 views
25

Cả hai jenkins (ci-server) và kho lưu trữ git của tôi được lưu trữ trên cùng một máy chủ. Các repo git được kiểm soát bởi gitolite. Nếu tôi truy cập vào kho từ bên ngoài, ví dụ từ máy trạm của tôi tôi nhận đượcgitolite: Yêu cầu phân bổ PTY không thành công trên kênh 0

ssh [email protected] 

PTY allocation request failed on channel 0 
hello simou, this is [email protected] running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4 

R W testing 
Connection to arrakis closed. 

nào là tốt Tôi đoán (ngoài PTY ... cảnh báo)

Bây giờ lại cho máy chủ, tôi muốn jenkins để có thể kết nối với kho git của tôi.

[email protected]:~> ssh [email protected] 
gitolite: PTY allocation request failed on channel 0 

Logging lên Arrakis như sử dụng git (người dùng gitolite):

[email protected]:~> cat ~git/.ssh/authorized_keys 

command="/home/git/gitServer/gitolite/src/gitolite-shell jenkins",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty ssh-rsa <PUBLIC-KEY> [email protected] 

Các "no-pty" entry khiến tôi nghi ngờ, vì vậy tôi loại bỏ nó từ authorized_keys và cố gắng một lần nữa:

[email protected]:~> ssh [email protected] 
hello jenkins, this is [email protected] running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4 

R W testing 
Connection to arrakis closed. 

Điều này giải quyết được vấn đề của tôi tại thời điểm này, nhưng tôi không chắc chắn về hậu quả của việc xóa "no-pty".

Và tại sao nó chỉ ảnh hưởng đến quyền truy cập cục bộ, vì truy cập từ xa dường như không bị ảnh hưởng gì cả?


openSUSE 11.4 (x86_64) VERSION = 11,4 Codename = Celadon

Trả lời

46

Sự khác biệt về hành vi giữa máy trạm và máy chủ của bạn có thể do sử dụng các phiên bản khác nhau của máy khách OpenSSH (ssh) trên mỗi hệ thống (không phải từ xa so với địa phương). Máy khách sẽ yêu cầu một pty từ máy chủ trừ khi -T được cung cấp, hoặc tùy chọn cấu hình RequestTTY được đặt thành no (tùy chọn sau có sẵn trong OpenSSH 5.9). Sự khác biệt trong hành vi phát sinh trong cách thức giao dịch của khách hàng với việc yêu cầu này bị từ chối bởi máy chủ (ví dụ vì no-pty được đưa ra trong áp dụng authorized_keys entry):

  • Trước OpenSSH 5.6:
    • khách hàng sẽ hiển thị các “yêu cầu phân bổ pTY thất bại” tin nhắn, và
    • tiếp tục trong “không có pty” chế độ
  • trong mở SH 5.6-5.8:
    • khách hàng sẽ hiển thị “yêu cầu phân bổ PTY thất bại” tin nhắn, và
    • hủy bỏ kết nối
  • Trong OpenSSH 5.9 (và mới hơn):
    • khách hàng sẽ hiển thị thông báo “Yêu cầu phân bổ PTY không thành công” và
    • nếu không có -tRequestTTYauto (mặc định), sau đó
      • tiếp tục trong “không có pty” chế độ
    • khác (-t nhất định, hoặc tùy chọn RequestTTY cấu hình là yes hoặc force)
      • hủy bỏ kết nối

Kể từ của ssh máy chủ của bạn xuất hiện để hủy bỏ khi yêu cầu phân bổ pty nó bị từ chối, nó có lẽ là chạy OpenSSH 5,6-5,8 (ít nhất là trong nhị phân client). Tương tự như vậy, vì máy trạm của bạn ssh hiển thị cảnh báo, nhưng vẫn tiếp tục, có thể nó đang chạy OpenSSH từ trước 5.6 hoặc phiên bản 5.9 hoặc mới hơn. Bạn có thể kiểm tra phiên bản của mình với ssh -V.

Bạn có thể ngăn sự khác biệt trong hành vi bằng cách sử dụng luôn luôn đưa ra các tùy chọn -T để các khách hàng (mọi phiên bản) không bao giờ yêu cầu một pty từ máy chủ:

ssh -T [email protected] 

Trong truy cập Git thực tế, khách hàng không bao giờ cố gắng để phân bổ một pty vì Git sẽ cung cấp cho khách hàng một lệnh cụ thể để chạy (ví dụ: ssh server git-upload-pack path/to/repository) thay vì yêu cầu một phiên "tương tác" (ví dụ: ssh server). Nói cách khác, no-pty không nên gây ra sự cố cho truy cập Git thực tế; nó chỉ ảnh hưởng đến việc kiểm tra xác thực của bạn (tùy thuộc vào phiên bản nào của máy khách OpenSSH mà bạn đang chạy) vì thiếu đối số lệnh gây ra một yêu cầu phân bổ ngầm (cho một phiên "tương tác").


Từ OpenSSH 5.6 release announcement:

  • Kill kênh khi yêu cầu phân bổ pty thất bại. Cố định khách hàng bị mắc kẹt nếu máy chủ từ chối phân bổ pty (bz # 1698)

bz#1698 có vẻ là một tham chiếu đến một report logged in the “Portable OpenSSH” Bugzilla.


Từ thông điệp check-in của OpenSSH clientloop.c rev 1.234:

cải thiện hành vi của chúng tôi khi phân bổ TTY thất bại: nếu chúng ta đang ở RequestTTY = chế độ tự động (mặc định), sau đó không điều trị tại TTY lỗi phân bổ làm chết người mà chỉ khôi phục TTY cục bộ về chế độ nấu chín và tiếp tục. Điều này là duyên dáng hơn trên các thiết bị mà không bao giờ phân bổ TTY.

Nếu RequestTTY được đặt thành "có" hoặc "force", thì không thể phân bổ TTY là gây tử vong.

+0

Khá nhiều thông tin. +1 – VonC

+1

Câu trả lời rất kỹ lưỡng, và cũng được giải thích ... nhiều đánh giá cao! – simou

+0

Máy chủ của tôi chạy trên ** OpenSSH_5.8p1 **, OpenSSL 1.0.0c 2 tháng 12 năm 2010 trong khi máy tính để bàn của tôi đang sử dụng ** OpenSSH_5.9p1 **, OpenSSL 0.9.8t ngày 18 tháng 1 năm 2012. Vì vậy, mọi thứ chính xác như cách bạn mô tả . Mặc dù tôi không chắc chắn về statemant của bạn về "no-pty" không có bất kỳ tác dụng phụ tiêu cực trên giao tiếp git trần. Tôi chỉ tình cờ gặp vấn đề này vì các bản vẽ jenkins của tôi không thành công do kết nối máy chủ bị hủy bỏ. Ngay sau khi tôi xóa mục "no-pty", vấn đề đã biến mất. Có thể thủ phạm là URL kho git @ arrakis: myproject được sử dụng để cấu hình plugin jenkins git. – simou

2

Để biết tại sao nó chỉ ảnh hưởng đến việc tiếp cận địa phương, bạn sẽ cần phải gỡ nó như in this article.

ssh -vvv [email protected] 

Nếu /etc/ssh/sshd_config SSH daemon tập tin cấu hình của bạn có chứa (un-nhận xét) dòng SyslogFacility AUTHPRIV, bạn có thể có một cái nhìn vào các bản ghi SSH của bạn trong /var/log/secure.

Điều đó đang được nói, hãy xem GitoliteV3: Tôi không nghĩ rằng nó sử dụng no-pty trong thiết lập hiện tại.

1

Bên cạnh Chris Johnsen rất hoàn chỉnh nốt câu trả lời cho explicitely lệnh info sẽ không hiển thị cảnh báo PTY:

ssh [email protected] info 

Trong trường hợp SSH cho rằng đây không phải là một phiên tương tác và sẽ không yêu cầu TTY.

Các vấn đề liên quan