在 GitHub Actions 上通过 SSH 自连接

Aru*_*ekk 2 ssh github-actions

我找不到在 GH Actions 上使用正在运行的 SSH 服务器的方法。当我尝试127.0.0.1通过 ssh连接时,有一个服务器并响应,但不知何故忽略了.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
Run Code Online (Sandbox Code Playgroud)

我对结果不满意,因为我无法在本地重现日志(我拥有的每台机器都表现正常,即允许执行命令)。

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.
Run Code Online (Sandbox Code Playgroud)

小智 5

这是一个权限问题。默认情况下,容器中主文件夹的权限太宽,ssh 守护程序无法接受(world/others 读/写),因此服务器端拒绝您的连接。删除主目录上的 world/others 读/写权限可以解决这个问题。

要修复,请在 ssh 调用之前将以下内容添加到您的脚本中。此命令删除其他人对主目录的读/写权限:

chmod og-rw ~
Run Code Online (Sandbox Code Playgroud)

证据:

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
Run Code Online (Sandbox Code Playgroud)

Github 操作的输出:

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)
Run Code Online (Sandbox Code Playgroud)