ubuntu24.04如何通过systemd开机后将22端口转发到公网?-灵析社区

世界唯一的

nat.sh文件内容如下 #!/bin/bash local_ip=127.0.0.1 remote_ip=公网服务器ip remote_port=22 remote_user=root remote_password=服务器密码 target_port=("22:22222") for item in ${target_port[@]};do array=(${item//:/ }) the_local_port=${array[0]} the_remote_port=${array[1]} /usr/bin/ssh -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -o ExitOnForwardFailure=yes -N -f -R $the_remote_port:$local_ip:$the_local_port $remote_user@$remote_ip -p $remote_port done 我将公钥放到了公网服务器,所以不需要密码的。 我手动执行这个nat.sh是没问题的,一切正常,但是开机启动就报连接公网服务器无权限。 我的开机启动脚本内容如下 [Unit] Description=nat After=multi-user.target [Service] Type=simple User=tom ExecStart=/home/tom/nat.sh Restart=always [Install] WantedBy=multi-user.target 错误日志 Jul 25 14:17:06 konka systemd[1]: Started nat.service - nat. Jul 25 14:17:07 konka nat.sh[3002]: Permission denied, please try again. Jul 25 14:17:07 konka nat.sh[3002]: Permission denied, please try again. Jul 25 14:17:07 konka nat.sh[3002]: root@ip地址: Permission denied (publickey,password). Jul 25 14:17:07 konka systemd[1]: nat.service: Main process exited, code=exited, status=255/EXCEPTION Jul 25 14:17:07 konka systemd[1]: nat.service: Failed with result 'exit-code'. Jul 25 14:17:07 konka systemd[1]: nat.service: Scheduled restart job, restart counter is at 5. Jul 25 14:17:07 konka systemd[1]: nat.service: Start request repeated too quickly. Jul 25 14:17:07 konka systemd[1]: nat.service: Failed with result 'exit-code'. Jul 25 14:17:07 konka systemd[1]: Failed to start nat.service - nat.

阅读量:177

点赞量:0

问AI
我猜应该是这样的: 脚本里面ssh的命令加了 -f ,这个参数会让ssh在连接成功之后保持在后台运行。 然后systemd配置文件中,指定了type=simple。这个simple通常是需要让你的程序在前台运行,主进程不退出的情况下才应该用这个模式。 ssh -f 之后,主进程会退出,这个时候simple模式下的service会被判定为进程已经结束,并且启动失败。 所以修复的方法有两种: 第一种,去掉ssh的-f参数,让它保持前台运行 第二种:修改service,设置type为fork 两种方式随便选一种操作一下就可以了。