我已经通过 autossh 建立了隧道。
这有效:
autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]
我想在后台运行 autossh。使用该-f
选项似乎很容易。
但这不起作用:
autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]
Autossh 在后台运行良好,但 ssh 连接似乎每次都会失败。在 /var/syslog 中,我看到多次出现以下情况:
autossh[3420]: ssh exited with error status 255; restarting ssh
我做错了什么?我猜测这与通过密钥文件进行身份验证有关。我该如何调试这个问题(在 ssh 选项中添加 -v 似乎不会在任何地方记录)。
编辑: 我使用 -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
-i myIdFile
因此,使用 -f 选项时,autossh 似乎不接受我的身份文件 ( )。这是为什么?
(Raspian 上的 autossh 1.4c)
答案1
似乎当 autossh 转到后台(-f 选项)时,它会更改工作目录,这意味着相对路径不再起作用。或者更具体地说:通过输入你的 id 文件的绝对路径你很可能会成功。
我通过在非默认位置创建没有密码的密钥来重新创建该场景:
~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa
我只需按两次回车键即可生成一个不受密码保护的密钥。
我将新密钥复制到我的服务器(目前允许密码验证):
~/test$ ssh-copy-id -i test_id_rsa user@server
首先,我确认密钥可以与常规 ssh 一起使用,然后像您一样使用 autossh:
~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C
它们都运行良好,因此我重现了您遇到的问题:
~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server
这不起作用,并写入以下内容/var/log/syslog
:
autossh[2406]: ssh 过早退出,状态为 255;autossh 正在退出
通过将密钥文件的路径更改为绝对路径,它可以起作用:
~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server
没有错误/var/log/syslog
。
答案2
不确定 -f 发生了什么,但您也可以使用 nohup :
nohup autossh -M 33201 -N -f -i myIdFile -R 33101:localhost:22 [email protected] &
答案3
将以下参数添加到 SSH 以绕过“您确定要继续连接(是/否)吗?”
-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
最终命令的格式如下:
autossh -f -M $BASE_PORT -N -R $LOCAL_PORT:$LOCALHOST:$REMOTE_PORT $USER@$SERVER -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
答案4
我遇到了一个问题,主机密钥指纹被重置并导致 255 错误。
尝试建立正常的 SSH 会话,通过将机器添加回已知主机来解决 autossh 的问题:
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[XXXXXXXXXXXXX]:22' (ED25519) to the list of known hosts.
systemctl status autossh.service
在上述步骤后立即生效(重启后同样有效)。