Jenkins (ci-server) et mon référentiel git sont hébergés sur le même serveur. Le repo git est contrôlé par gitolite. Si j'accède au référentiel de l'extérieur, par exemple depuis mon poste de travail, je reçois
ssh git@arrakis
PTY allocation request failed on channel 0
hello simou, this is git@arrakis running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4
R W testing
Connection to arrakis closed.
Ce qui est bien je suppose (à part le PTY ... avertissement)
De retour sur le serveur, j'aimerais que Jenkins puisse également se connecter à mon référentiel git.
jenkins@arrakis:~> ssh git@arrakis
gitolite: PTY allocation request failed on channel 0
Se connecter sur arrakis en tant qu’utilisateur git (l’utilisateur gitolite):
git@arrakis:~> 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> jenkins@arrakis
L'entrée "no-pty" m'a rendu méfiant, alors je l'ai enlevé de allowed_keys et j'ai encore essayé:
jenkins@arrakis:~> ssh git@arrakis
hello jenkins, this is git@arrakis running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4
R W testing
Connection to arrakis closed.
Cela résout mon problème à ce stade, mais je ne suis pas sûr des conséquences de la suppression de "non-pty".
Et pourquoi n'affecte-t-il que l'accès local, puisque l'accès distant ne semble pas du tout affecté?
openSUSE 11.4 (x86_64) VERSION = 11.4 CODENAME = Céladon
La différence de comportement entre votre poste de travail et votre serveur est probablement due à l'utilisation de versions différentes du client OpenSSH (ssh
) sur chaque système (non distant par rapport à local). Le client demandera un pty au serveur sauf si -T
est fourni ou si l'option de configuration RequestTTY
est définie sur no
(cette dernière était disponible pour la première fois dans OpenSSH 5.9). La différence de comportement provient de la manière dont le client traite le fait que cette requête soit refusée par le serveur (par exemple, parce que no-pty
est donné dans l'entrée authorized_keys
applicable):
-t
n'a pas été donné et que RequestTTY
est auto
(valeur par défaut), alors -t
donné, ou l'option de configuration RequestTTY
est yes
ou force
) Étant donné que la variable ssh
de votre serveur semble abandonner lorsque sa demande d’allocation pty est rejetée, il exécute probablement OpenSSH 5.6-5.8 (au moins pour le fichier binaire du client). De même, étant donné que ssh
de votre poste de travail affiche l’avertissement, mais continue, il exécute probablement un OpenSSH à partir d’avant la version 5.6, ou une version antérieure à la version 5.9. Vous pouvez vérifier vos versions avec ssh -V
.
Vous pouvez éviter cette différence de comportement en utilisant toujours l'option -T
afin que le client (quelle que soit sa version) ne demande jamais une pty au serveur:
ssh -T git@YourServer
Lors de l'accès réel à Git, le client n'essaie jamais d'allouer un pty car Git lui donnera une commande spécifique à exécuter (par exemple ssh server git-upload-pack path/to/repository
) au lieu de demander une session «interactive» (par exemple ssh server
). En d'autres termes, no-pty
n'aurait pas dû causer de problèmes d'accès réel à Git; cela n'affectait que vos tests d'authentification (selon la version du client OpenSSH que vous utilisiez) car l'absence d'argument de commande entraînait une demande d'allocation pty implicite (pour une session «interactive»).
Depuis l'annonce de la version OpenSSH 5.6 :
- Supprimez le canal lorsque les demandes d'allocation de pty échouent. Client bloqué fixe si le serveur refuse l'allocation pty (bz # 1698)
bz#1698
semble être une référence à un rapport consigné dans le fichier «Portable OpenSSH» Bugzilla .
Extrait du message d’enregistrement de OpenSSH clientloop.c rev 1.234 :
améliorer notre comportement lorsque l'attribution de téléscripteurs échoue: si nous sommes dans RequestTTY = mode automatique (par défaut), ne traitez pas à TTY erreur d’attribution fatale, mais il suffit simplement de restaurer le téléscripteur local en mode cuit et continuer. C'est plus gracieux sur les appareils que n'attribuez jamais d'ATS.
Si RequestTTY est défini sur "yes" ou "force", échec de l'allocation un ATS est fatal.
Pour savoir pourquoi cela affecte uniquement l'accès local, vous devez le déboguer comme dans cet article .
ssh -vvv git@arrakis
Si votre fichier de configuration /etc/ssh/sshd_config
du démon SSH contient la ligne SyslogFacility AUTHPRIV
(non commentée), vous pouvez consulter vos journaux SSH dans /var/log/secure
.
Cela étant dit, consultez GitoliteV3 : Je ne pense pas qu’il utilise no-pty
dans la configuration actuelle.
À côté de Chris Johnsen, notez que la réponse très complète indique explicitement que la commande info
n’affiche pas l’avertissement PTY:
ssh git@arrakis info
Dans ce cas, SSH considère qu'il ne s'agit pas d'une session interactive et ne demandera pas de TTY.