sshd AuthorizedKeysCommand выбрасывает статус 127

Я пытаюсь создать службу ssh, чтобы разрешить push/pull для фабрикаторских репозиториев. Я докеризировал все сервисы, и в настоящее время я сталкиваюсь с нечетной ошибкой, которая не в состоянии выполнить требуемый скрипт аутентификации для ssh.

Образ докера запускает оба php-fpm а также sshd сервисы, с идеей объединения ssh с необходимыми php-скриптами.

В частности, у меня есть следующий файл / 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

(как примечание, PrintLastLog выдает ошибку, когда я запускаю sshd, который, я не думаю, связан, но может быть??)

Когда я запускаю вручную

su - git -c "/srv/phabricator/scripts/ssh/ssh-auth.php git"Я могу успешно выполнить скрипт.

ОДНАКО, когда я рассматриваю sshd логи при работе в режиме отладки (/usr/sbin/sshd -d -d -d), Я получаю следующую ошибку:

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

РЕДАКТИРОВАТЬ: Кажется, как /usr/libexec/phabricator-ssh-hook.sh на самом деле выполняется, но скрипт, который он выполняет /srv/phabricator/bin/ssh-auth По-видимому, терпит неудачу. Этот файл (каталог phabricator) фактически находится на томе хоста. Интересно, может ли это быть причиной этих status 127 проблемы.

Я читал, что статус / 127 возвращается /bin/sh, когда данная команда не найдена в PATH и не является командой встроенной оболочки (или не может быть найдена библиотека, используемая сценарием).

При этом я могу выполнить скрипт вручную, поэтому маловероятно, что статус 127 относится к этому.

Обратите внимание, что я могу выполнить как git пользователь также.

информация о версии контейнера докера:

Linux version 4.11.9-1-ARCH (builduser@tobias) (gcc version 7.1.1 20170621 (GCC) ) #1 SMP PREEMPT Wed Jul 5 18:23:08 CEST 2017

Любая помощь в правильном направлении будет принята с благодарностью.

РЕДАКТИРОВАТЬ

версия докера

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

информация о докере

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

3 ответа

Решение

Я тоже боролся с этим. В конце концов я обнаружил, что php не был в PATH при выполнении phabricator-ssh-hook.sh, В моем случае это установлено в /usr/local/bin (FreeBSD по умолчанию), поэтому я добавил:

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

до последней строки phabricator-ssh-hook.sh,

Я смог заставить это работать со следующей конфигурацией

AuthorizedKeysCommand /bin/sh /etc/ssh/auth.sh %u %f %k
AuthorizedKeysCommandUser root

При запуске скрипта напрямую он выкидывал

May 13 17:22:11 ip-10-0-0-100 sshd[5833]: error: AuthorizedKeysCommand /etc/ssh/auth.sh user failed, status 127

После прямого вызова /bin/sh все заработало!

Мой сценарий указан #!/bin/bashно bash был недоступен. Мне пришлось изменить это на#!/bin/sh

У меня была похожая проблема, но не в Docker-контейнере. Этот комментарий из вышеприведенного ephemient решил эту проблему для меня: https://secure.phabricator.com/book/phabricator/article/diffusion_hosting/ И сам скрипт, и родительский каталог, в котором находится скрипт, должны принадлежать пользователю root, а скрипт должно иметь 755 разрешений. Если вы этого не сделаете, sshd откажется выполнять ловушку."Вы это проверяли?

Другие вопросы по тегам