You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS Stream系统开机自动建立指定SSH隧道的配置求助

CentOS Stream系统开机自动建立指定SSH隧道的配置求助

嗨,我来帮你搞定这个开机自动运行SSH隧道的问题~你的核心问题确实是cron执行命令时没法交互输入密码,所以得先解决免密登录localhost的问题,再选个靠谱的开机启动方式,具体步骤如下:

第一步:配置本地SSH免密登录

这是解决密码输入问题的关键,操作很简单:

  • 先生成SSH密钥对(如果还没生成的话):
    执行ssh-keygen -t ed25519,全程按回车就行,不要设置密钥密码(设置的话又会需要输入,反而麻烦)。
  • 把公钥添加到本地授权列表:
    可以用ssh-copy-id localhost,这时候需要输一次当前用户的密码,完成后再运行ssh localhost,如果能直接进入shell不用输密码,就说明配置成功了。
    要是ssh-copy-id不好使,也可以手动复制:
    cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
    chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
    
    (权限设置很重要,不然SSH会拒绝使用这个密钥)

第二步:选择开机启动方式

这里给你两个选项,推荐第二个,稳定性更高:

选项一:调整Cron Job

原来的cron命令可能存在路径或启动时机的问题,修改成这样试试:

@reboot root sleep 30 && /usr/bin/ssh -L 0.0.0.0:9944:localhost:9922 localhost -N >> /var/log/ssh_tunnel.log 2>&1
  • 加sleep 30是为了等开机后网络和SSH服务完全启动,避免cron跑太早导致失败;
  • 用/usr/bin/ssh完整路径是因为cron的环境变量可能不包含ssh的路径;
  • 后面的日志重定向方便你出问题时排查。

选项二:使用Systemd服务(更推荐)

Systemd比cron更适合管理这种需要依赖网络的后台服务,还能自动重启意外断开的隧道:

  1. 创建服务文件:
    编辑/etc/systemd/system/ssh-tunnel.service,写入以下内容:
    [Unit]
    Description=自动启动SSH隧道
    After=network.target sshd.service
    
    [Service]
    Type=simple
    User=root
    ExecStart=/usr/bin/ssh -L 0.0.0.0:9944:localhost:9922 localhost -N
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
  2. 重新加载Systemd配置:
    systemctl daemon-reload
    
  3. 设置开机自启并启动服务:
    systemctl enable ssh-tunnel.service
    systemctl start ssh-tunnel.service
    
  4. 可以用systemctl status ssh-tunnel.service查看服务是否正常运行,要是有问题也能从这里看到报错信息。

这样配置后,开机时系统会等网络和SSH服务就绪后再启动隧道,就算隧道意外断开也会自动重启,比cron靠谱多啦~

备注:内容来源于stack exchange,提问作者Samul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:33:04