后台的 autossh 不起作用

hen*_*g77 14 ssh ssh-tunnel

我已经通过 autossh 建立了一个隧道。

这有效:

autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com
Run Code Online (Sandbox Code Playgroud)

我想在后台运行 autossh。使用该-f选项似乎很容易。

但是,这不起作用:

autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com
Run Code Online (Sandbox Code Playgroud)

Autossh 在后台正常运行,但 ssh 连接似乎每次都失败。在 /var/syslog 中,我看到多次出现:

autossh[3420]: ssh exited with error status 255; restarting ssh
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?一个疯狂的猜测是它与通过密钥文件的身份验证有关。我该如何调试(将 -v 添加到 ssh 选项似乎没有记录到任何地方)。

编辑: 我使用 -y 选项获得了一些 ssh 日志

/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: No more authentication methods to try.
/usr/bin/ssh[3484]: fatal: Permission denied (publickey).
autossh[3469]: ssh exited with error status 255; restarting ssh
Run Code Online (Sandbox Code Playgroud)

因此,似乎 autossh-i myIdFile在使用 -f 选项时不接受我的身份文件 ( )。这是为什么?

(Raspian 上的 autossh 1.4c)

小智 31

当 autossh 进入后台(-f 选项)时,它似乎正在更改工作目录,这意味着相对路径不再起作用。或者更具体地说:通过输入您的 id 文件的绝对路径,您可能会成功。

我通过在非默认位置创建一个没有密码的密钥重新创建了这个场景:

~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa
Run Code Online (Sandbox Code Playgroud)

我只需按两次 Enter 即可生成不受密码保护的密钥。

我将新密钥复制到我的服务器(目前允许密码验证):

~/test$ ssh-copy-id -i test_id_rsa user@server
Run Code Online (Sandbox Code Playgroud)

首先,我确认密钥正在使用常规 ssh,然后像您一样使用 autossh:

~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C
Run Code Online (Sandbox Code Playgroud)

他们都工作得很好,所以我重新创建了你遇到的问题:

~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server
Run Code Online (Sandbox Code Playgroud)

这不起作用,以下内容被写入/var/log/syslog

autossh[2406]:ssh 过早退出,状态为 255;autossh 退出

通过将密钥文件的路径更改为绝对路径,它虽然有效:

~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server
Run Code Online (Sandbox Code Playgroud)

中没有错误/var/log/syslog

  • -N 选项很重要,否则你会得到“ssh exited with status 0; autossh exiting”。谢谢! (2认同)