Самостоятельное подключение через S SH на GitHub Actions - PullRequest
1 голос
/ 05 февраля 2020

Я не могу найти способ использовать работающий сервер S SH в GH Actions. Когда я пытаюсь подключиться к 127.0.0.1 через s sh, сервер появляется и отвечает, но каким-то образом игнорирует файлы конфигурации в .ssh (или в любом другом случае).

Вот какой сценарий я использовал (общие настройки, похоже, не влияют на результаты):

ssh-keygen -t ed25519 -f ~/.ssh/whatever -N ''
cat > ~/.ssh/config <<EOF
Host host.example
    User $USER
    HostName 127.0.0.1
    IdentityFile ~/.ssh/whatever
EOF
echo -n 'from="127.0.0.1" ' | cat - ~/.ssh/whatever.pub > ~/.ssh/authorized_keys
ssh -o 'StrictHostKeyChecking no' host.example id

Я не удовлетворен результатами, так как не могу воспроизвести журнал локально (все машины, которые у меня есть, ведут себя нормально, т.е. позволяет выполнить команду).

Generating public/private ed25519 key pair.
Created directory '/home/runner/.ssh'.
Your identification has been saved in /home/runner/.ssh/whatever.
Your public key has been saved in /home/runner/.ssh/whatever.pub.
The key fingerprint is:
SHA256:2ZCprVg5rZXp0IguQlCanUVTlCX7IFt2TPTnimdk0gM runner@fv-az60
The key's randomart image is:
+--[ED25519 256]--+
|  ..+o+++        |
| = o ..= +       |
|+ o . = E . .    |
|.    * @ O o     |
| .  o B S * .    |
|.  . o B = o     |
|. . o o o +      |
| . .     o       |
|                 |
+----[SHA256]-----+
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
runner@127.0.0.1: Permission denied (publickey,password).
##[error]Process completed with exit code 255.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Это проблема с разрешениями. По умолчанию разрешения для домашней папки в контейнере слишком широки, чтобы демон s sh мог их принять (чтение / запись world / others), поэтому серверная сторона отклоняет ваше соединение. Устранение проблемы с правами на чтение / запись world / others в вашем домашнем каталоге устраняет эту проблему.

Чтобы исправить это, добавьте следующее в ваш скрипт непосредственно перед вызовом s sh. Эта команда удаляет другие права на чтение / запись в домашнем каталоге:

chmod og-rw ~

Доказательства:

name: ssh-example
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Run a multi-line script
      run: |
        ssh-keygen -t ed25519 -f ~/.ssh/whatever -N ''
        cat > ~/.ssh/config <<EOF
          Host host.example
           User $USER
           HostName 127.0.0.1
           IdentityFile ~/.ssh/whatever
        EOF
        echo -n 'from="127.0.0.1" ' | cat - ~/.ssh/whatever.pub > ~/.ssh/authorized_keys
        echo "Before fixing permissions on authorized_keys, notice home directory is world read/write"
        ls -la ~/.ssh
        ssh -o 'StrictHostKeyChecking no' host.example id || echo "ssh failed as expected... trying to fix permissions"
        chmod og-rw ~
        echo "After fixing permissions on home folder ~ ..."
        ls -la ~/.ssh
        ssh -o 'StrictHostKeyChecking no' host.example id

Вывод из Github Action:

Generating public/private ed25519 key pair.
Created directory '/home/runner/.ssh'.
Your identification has been saved in /home/runner/.ssh/whatever.
Your public key has been saved in /home/runner/.ssh/whatever.pub.
The key fingerprint is:
SHA256:vKl342+LK4YP7Kj00Eqm1Jnst/7ED3Pzu/6TPOiHoUc runner@fv-az76
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|                 |
|       .         |
|        S        |
|  o.o..  o E     |
| .==. o*ooo = .  |
|.=.+ +ooO.==.*   |
|. oo=o==.=B@Boo  |
+----[SHA256]-----+
Before fixing permissions on authorized_keys, notice home directory is world read/write
total 24
drwx------ 2 runner docker 4096 Feb 23 21:58 .
drwxrwxrwx 8 runner docker 4096 Feb 23 21:58 ..
-rw-r--r-- 1 runner docker  113 Feb 23 21:58 authorized_keys
-rw-r--r-- 1 runner docker   89 Feb 23 21:58 config
-rw------- 1 runner docker  411 Feb 23 21:58 whatever
-rw-r--r-- 1 runner docker   96 Feb 23 21:58 whatever.pub
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
runner@127.0.0.1: Permission denied (publickey,password).
ssh failed as expected... trying to fix permissions
After fixing permissions on home folder ~ ...
total 28
drwx------ 2 runner docker 4096 Feb 23 21:58 .
drwx--x--x 8 runner docker 4096 Feb 23 21:58 ..
-rw-r--r-- 1 runner docker  113 Feb 23 21:58 authorized_keys
-rw-r--r-- 1 runner docker   89 Feb 23 21:58 config
-rw-r--r-- 1 runner docker  222 Feb 23 21:58 known_hosts
-rw------- 1 runner docker  411 Feb 23 21:58 whatever
-rw-r--r-- 1 runner docker   96 Feb 23 21:58 whatever.pub
uid=1001(runner) gid=115(docker) groups=115(docker)
0 голосов
/ 24 февраля 2020

Отказ в разрешении может быть вызван несколькими причинами. это код из github repo

    if (options.control_master == SSHCTL_MASTER_ASK ||
        options.control_master == SSHCTL_MASTER_AUTO_ASK) {
        if (!ask_permission("Allow shared connection to %s? ", host)) {
            debug2("%s: session refused by user", __func__);
            reply_error(reply, MUX_S_PERMISSION_DENIED, rid,
                "Permission denied");

это вызвано отказанным соединением

вероятные причины.

  1. sshd daemon ie s sh сервер не работает
  2. пользователь не имеет разрешения на s sh.
  3. только root имеет разрешение на s sh.

check

# systemctl status sshd.service |grep Active

также проверьте

# cat /etc/ssh/sshd_config

Я не думаю. Разрешения * S sh являются проблемой. как они созданы пользователем. Маска прав пользователя в большинстве случаев составляет 755. Именно поэтому отсутствие разрешения для одного и того же пользователя на собственный каталог .s sh крайне маловероятно.

Сообщите мне, если проблема не исчезнет.

...