代码之家  ›  专栏  ›  技术社区  ›  clo_jur

sshd AuthorizedKeysCommand抛出状态127

  •  0
  • clo_jur  · 技术社区  · 7 年前

    我正在尝试构建一个ssh服务,以允许推/拉到phabricator repos。我已经对接了所有服务,目前遇到了一个奇怪的错误,无法执行ssh所需的auth脚本。

    php-fpm sshd

    特别是,我有以下/etc/ssh/sshd\u配置:

    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
    

    当我手动运行时

    su - git -c "/srv/phabricator/scripts/ssh/ssh-auth.php git" ,我能够成功执行脚本。

    固态硬盘 在调试模式下运行时的日志( /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 status 127 问题。

    我已经了解到,当给定命令未从PATH中找到并且不是内置shell命令(或者无法找到脚本使用的库)时,/bin/sh返回状态127。

    这就是说,我能够手动执行脚本,因此状态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

    如果能在正确的方向上提供帮助,我们将不胜感激。

    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信息

    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
    
    4 回复  |  直到 7 年前
        1
  •  4
  •   user896993    6 年前

    我能够通过以下配置实现这一点

    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后,它成功了!

        2
  •  2
  •   dferenc ari    7 年前

    我也在努力解决这个问题。最终,我发现 php 不在 PATH phabricator-ssh-hook.sh . 就我而言,它安装在 /usr/local/bin (FreeBSD默认),所以我添加了:

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

    phabricator ssh挂钩。上海 .

        3
  •  0
  •   RJ Cole    6 年前

    我有一个类似的问题,但在docker容器中没有。上面的评论为我解决了这个问题: https://secure.phabricator.com/book/phabricator/article/diffusion_hosting/ 脚本本身和脚本所在的父目录都必须由root所有,并且脚本必须具有755权限。如果不这样做,sshd将拒绝执行钩子。“你查过了吗?

        4
  •  0
  •   Michael Cole    4 年前

    #!/bin/bash #!/bin/sh