2017-08-22 9 views
0

J'essaye de construire un service ssh pour permettre les repos push/pull vers le phabricator. J'ai dockerized tous les services, et je cours actuellement dans une erreur bizarre qui ne réussit pas à exécuter le script d'authentification requis pour ssh. L'image docker exécute les services php-fpm et sshd, avec l'idée d'unifier ssh avec les scripts php requis.sshd AuthorizedKeysCommand renvoie l'état 127

En particulier, je donne les résultats suivants/etc/ssh/sshd_config:

AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh 
AuthorizedKeysCommandUser git 
AllowUsers git 

Port 2222 
Protocol 2 
PermitRootLogin no 
AllowAgentForwarding no 
AllowTcpForwarding no 
PrintMotd no 
#PrintLastLog no 
PasswordAuthentication no 
ChallengeResponseAuthentication no 
AuthorizedKeysFile none 

PidFile /var/run/sshd-phabricator.pid 

(comme une note de côté, PrintLastLog renvoie une erreur quand je commence sshd, que je ne pense pas est lié, mais peut-être ??)

Quand je lance manuellement

su - git -c "/srv/phabricator/scripts/ssh/ssh-auth.php git", je suis en mesure d'exécuter avec succès le script.

Cependant, quand j'examine les sshd journaux lors de l'exécution en mode débogage (/usr/sbin/sshd -d -d -d), je reçois l'erreur suivante:

...other stuff... 
debug3: monitor_read: checking request 22 
debug3: mm_answer_keyallowed entering 
debug3: mm_answer_keyallowed: key_from_blob: 0x5564c1f473c0 
debug3: subprocess: AuthorizedKeysCommand command "/usr/libexec/phabricator-ssh-hook.sh git" running as git 
debug1: temporarily_use_uid: 1000/1000 (e=0/0) 
debug1: restore_uid: 0/0 
debug3: subprocess: AuthorizedKeysCommand pid 885 
debug1: temporarily_use_uid: 1000/1000 (e=0/0) 
debug2: key not found 
AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh git failed, status 127 
debug1: restore_uid: 0/0 
Failed publickey for git from some.ip.address.here port 58378 ssh2: ED25519 SHA256:GBGS4ag9s8msV3XsuojlIoqATF63tvXU3t5GIUN0eYY 
debug3: mm_answer_keyallowed: key 0x5564c1f473c0 is not allowed 
debug3: mm_request_send entering: type 23 
debug2: userauth_pubkey: authenticated 0 pkalg ssh-ed25519 [preauth] 
debug3: userauth_finish: failure partial=0 next methods="publickey" [preauth] 
debug3: send packet: type 51 [preauth] 
Connection closed by 24.5.151.66 port 58378 [preauth] 
debug1: do_cleanup [preauth] 
debug1: monitor_read_log: child log fd closed 
debug3: mm_request_receive entering 
debug1: do_cleanup 
debug1: Killing privsep child 884 

EDIT: It seems like /usr/libexec/phabricator-ssh-hook.sh actually does execute, but the script it executes /srv/phabricator/bin/ssh-auth , presumably fails. That file (the phabricator directory) is actually on a host volume. I wonder if that could be the cause of these status 127 issues.

J'ai lu que le statut 127 est renvoyé par/bin/sh lorsque la commande donnée est introuvable depuis PATH et qu'il ne s'agit pas d'une commande shell intégrée (ou qu'une bibliothèque ne peut pas être trouvée utilisée par le script). Cela étant dit, je suis capable d'exécuter le script manuellement, il semble donc peu probable que l'état 127 se réfère à cela.

Remarque ci-dessus, que je peux également exécuter en tant qu'utilisateur git.

la version contenant docker info:

Linux version 4.11.9-1-ARCH ([email protected]) (gcc version 7.1.1 20170621 (GCC)) #1 SMP PREEMPT Wed Jul 5 18:23:08 CEST 2017

Toute aide dans la bonne direction serait appréciée.

EDIT

version docker

Client: 
Version:  17.06.0-ce 
API version: 1.30 
Go version: go1.8.3 
Git commit: 3dfb8343 
Built:  Wed Jul 26 18:03:33 2017 
OS/Arch:  linux/amd64 

Server: 
Version:  17.06.0-ce 
API version: 1.30 (minimum version 1.12) 
Go version: go1.8.3 
Git commit: 02c1d87617 
Built:  Wed Jul 26 20:03:39 2017 
OS/Arch:  linux/amd64 
Experimental: false 

docker info

Containers: 10 
Running: 10 
Paused: 0 
Stopped: 0 
Images: 147 
Server Version: 17.06.0-ce 
Storage Driver: overlay2 
Backing Filesystem: extfs 
Supports d_type: true 
Native Overlay Diff: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: bridge host macvlan null overlay 
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Init Binary: docker-init 
containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a 
runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4 
init version: 949e6fa 
Security Options: 
seccomp 
    Profile: default 
Kernel Version: 4.11.9-1-ARCH 
Operating System: Arch Linux 
OSType: linux 
Architecture: x86_64 
CPUs: 4 
Total Memory: 7.631GiB 
Name: <host-name> 
ID: KYNR:4YHS:T4C2:URUY:GIB5:KCNF:DCNC:JLUT:DYO3:D5P7:VVOD:C2YV 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
Experimental: false 
Insecure Registries: 
127.0.0.0/8 
Live Restore Enabled: false 
+0

Publiez le Dockerfile, la version du docker et l'information du docker – user2915097

+0

@ user2915097 mis à jour, bien que le Dockerfile soit plutôt volumineux, et je préfère ne pas le poster publiquement. –

+0

https: //secure.phabricator.com/book/phabricator/article/diffusion_hosting/"Le script lui-même et le répertoire parent dans lequel se trouve le script doivent appartenir à root, et le script doit avoir 755 permissions Si vous ne le faites pas, sshd refusera d'exécuter le crochet." Avez-vous vérifié cela? – ephemient

Répondre

1

je luttais avec cela aussi. Finalement, j'ai trouvé que php n'était pas dans le PATH lors de l'exécution phabricator-ssh-hook.sh. Dans mon cas, il est installé dans /usr/local/bin (par défaut FreeBSD), donc j'ajouté:

export PATH="/usr/local/bin:$PATH" 

avant la dernière ligne de phabricator-ssh-hook.sh.

+0

Je ne me souviens pas de ce que j'ai fait, mais je l'ai eu à travailler finalement. Cela semble être une solution valable, alors je vais le marquer comme une réponse. –