2012-04-26 20 views
25

ジェンキン(ci-server)と私のgitリポジトリの両方が同じサーバー上でホストされています。 git repoは、gitoliteによって制御されます。私は私のワークステーションから、たとえば、外部からリポジトリにアクセスした場合、私は戻ってサーバーに今(...警告PTY以外)gitolite:チャネル0でPTY割り当て要求が失敗しました

結構です

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. 

は、私は推測を取得、私が欲しいですjenkinsも私のgitリポジトリに接続することができます。ユーザーのgit(gitoliteユーザー)としてarrakisへのログオン

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

は:

[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] 

"無PTY" のエントリは、私が不審作ったので、私はauthorized_keysにからそれを削除して、再度試してみました:

[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. 

これは私の問題をこの時点で解決しますが、「no-pty」を削除した結果についてはわかりません。

リモートアクセスにはまったく影響がないように見えるため、なぜローカルアクセスにのみ影響しますか?


のopenSUSE 11.4(x86_64版) VERSION = 11.4 CODENAME =セラドン

答えて

46

ワークステーションとサーバーの動作の違いは、各システムでOpenSSHクライアントの異なるバージョン(ssh)を使用している可能性があります(リモート対ローカルではありません)。 -Tが指定されていないか、またはRequestTTY設定オプションがno(OpenSSH 5.9で初めて使用可能)に設定されていない限り、クライアントはサーバからptyを要求します。動作の違いはどのようにクライアントのお得な情報(no-ptyが適用authorized_keysエントリに与えられているので、例えば)サーバーによって拒否された、この要求を持つで発生:OpenSSHの5.6前

    • クライアントが表示されます「PTYの割り当て要求が失敗しました」のメッセージ、および
    • が開きますにて「No PTY」モード
  • を続けますSH 5.6-5。8:
    • クライアントがメッセージを「PTY割り当て要求が失敗しました」表示され、
    • 接続
  • のOpenSSH 5.9で
  • (およびそれ以降)アボート:
    • クライアント「PTY割り当て要求が失敗しました」というメッセージが表示され、が指定されていない場合は
    • RequestTTYの場合はauto(デフォルト)、その後、
      • を中止し、「ノーPTY」モードで
    • -tが与えられた、またはRequestTTY設定オプションがyesforceある)
      • を続けます接続

サーバーのsshは、そのPTY割り当て要求が拒否されたときに中止するように見えるので、それはおそらく(少なくともクライアントバイナリ用)のOpenSSH 5.6から5.8を実行しています。同様に、ワークステーションのsshは警告を表示し続けますが、これはおそらく5.6より前のOpenSSH、または5.9以降のOpenSSHを実行している可能性があります。バージョンはssh -Vで確認できます。

あなたは、クライアント(すべてのバージョン)は、サーバからのPTY要求したことがないように、常に-Tオプションを与える使用して動作の違いを防ぐことができます。実際のGitのアクセス時

ssh -T [email protected] 

を、クライアントがしようとすることはありませんGitは "対話型"セッション(例:ssh server)を要求するのではなく、実行する特定のコマンド(例:ssh server git-upload-pack path/to/repository)をクライアントに与えるため、ptyを割り当てることができます。言い換えれば、no-ptyは実際のGitアクセスの問題を引き起こしてはいけません。コマンド引数の欠如が暗黙的なpty割り当て要求( "対話的"セッションのため)を引き起こすため、認証テスト(OpenSSHクライアントのバージョンによって実行テストに影響を与えた)にのみ影響します。 OpenSSH 5.6 release announcementから


  • キルチャンネルPTY割り当て要求が失敗します。サーバは(#1698 BZ)PTYの割り当てを拒否した場合、クライアント を立ち往生固定

bz#1698report logged in the “Portable OpenSSH” Bugzillaへの参照のようです。OpenSSH clientloop.c rev 1.234のチェックインのメッセージから


TTYの割り当てが失敗したときに私たちの行動を改善:我々は RequestTTY =オートモード(デフォルト)である場合には、TTYでは扱いません。 割り当てエラーが致命的ですが、ローカルTTY をcookedモードに復元して続行してください。これは、 がTTYを割り当てないデバイスでは、より優雅です。

RequestTTYが "yes"または "force"に設定されている場合、 TTYの割り当てに失敗すると致命的です。 SSHは、これは、対話型セッションではなく、要求しないだろうと考えている場合には

ssh [email protected]akis info 

:明示的infoコマンドを与えることPTYの警告が表示されないことクリス・ヨンセン非常に完全な答えノートの横に

+0

非常に有益です。 +1 – VonC

+1

非常に徹底的な答え、よく説明されて...非常に感謝! – simou

+0

私のサーバーは** OpenSSH_5.8p1 **、OpenSSL 1.0.0cは2010年12月2日、デスクトップPCは** OpenSSH_5.9p1 **、OpenSSL 0.9.8tは1月18日を使用しています。 。私は裸のgitコミュニケーションに否定的な副作用がない "no-pty"についてのあなたのstatemantについてはわかりませんが。私は、サーバー接続が中止されたために私のジェンキンスビルドが失敗したため、この問題を偶然見つけました。 「no-pty」エントリを削除すると、問題は消えました。多分、犯人はjenkins git pluginを設定するために使われたリポジトリURL git @ arrakis:myprojectです。 – simou

2

それが唯一のローカルアクセスに影響を与え、なぜ知っている、あなたはin this articleのようにそれをデバッグする必要があります。

ssh -vvv [email protected] 

あなた/etc/ssh/sshd_config SSHデーモンの設定ファイルは、(非コメント)ラインSyslogFacility AUTHPRIVが含まれている場合、あなたは/var/log/secureであなたのSSHのログを見てすることができます。

と言われています。GitoliteV3:現在の設定ではno-ptyとは思えません。

関連する問題