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不好使,也可以手动复制:
(权限设置很重要,不然SSH会拒绝使用这个密钥)cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
第二步:选择开机启动方式
这里给你两个选项,推荐第二个,稳定性更高:
选项一:调整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更适合管理这种需要依赖网络的后台服务,还能自动重启意外断开的隧道:
- 创建服务文件:
编辑/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 - 重新加载Systemd配置:
systemctl daemon-reload - 设置开机自启并启动服务:
systemctl enable ssh-tunnel.service systemctl start ssh-tunnel.service - 可以用
systemctl status ssh-tunnel.service查看服务是否正常运行,要是有问题也能从这里看到报错信息。
这样配置后,开机时系统会等网络和SSH服务就绪后再启动隧道,就算隧道意外断开也会自动重启,比cron靠谱多啦~
备注:内容来源于stack exchange,提问作者Samul
相关产品推荐
相关产品推荐

