启动服务并使用 ssh 或 autossh 运行/加载脚本,在后台进行远程端口转发“-f”以执行脚本中的更多/下一个命令!

启动服务并使用 ssh 或 autossh 运行/加载脚本,在后台进行远程端口转发“-f”以执行脚本中的更多/下一个命令!

我的配置:

debian 10.9

4.19.0-19-amd64

OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 Sep 2019

autossh 1.4g

GNU bash, 5.0.3(1)-release (x86_64-pc-linux-gnu)

我开始一项服务/etc/systemd/system/myshh.service

ExecStart=/home/user/ssh_run开始我的脚本ssh_run

这只是我尝试过的 SSH 和 AUTOSSH 的众多示例中的两个

ssh_运行脚本

#!/bin/bash

ssh -f -NT -o "ServerAliveInteval=30" -o "ServerAliveCountMax=2" \
-R 5555:localhost:443 -l [USER] [IP] -p [PORT] -i [KEY-WITHOUT-PASSWORD]

EXECUTE NEXT COMMAND

或者

#!/bin/bash

/usr/bin/autossh -f -NT -o "ExitOnForwardFailure=yes" \
-R 5555:localhost:443 -l [USER] [IP] -p [PORT] -i [KEY-WITHOUT-PASSWORD]

EXECUTE NEXT COMMAND
  1. 当我从 shell 中单独执行命令时,它可以工作ssh -f -NT ......

  2. 当我只执行脚本时它起作用./ssh_run

  3. 当我启动服务但它不起作用/etc/systemd/system/myshh.service-f

所有 3 个命令均不执行接下来的命令

问题:

当我启动服务时/etc/systemd/system/myshh.service,使用脚本./ssh_run并用于-f后台,现在执行下一个命令,但是服务退出,状态代码为 0,但没有 ssh 或 autosshps aux | grep [s]shps aux | grep [a]utossh

systemctl status myshh.service我也检查了没有grep错误journalctl

服务停止或重新启动,结果相同,我尝试使用和不使用Restart=30或在服务中Restart=alwaysEnvironment="AUTOSSH_GATETIME=0"

我阅读了所有堆栈站点的大部分帖子,并尝试了搜索引擎,没有找到解决方案,我尝试,,(command)....没有结果...execbash -c

现在我的问题/疑问:

我如何在后台的 bash 脚本中执行 ssh/autossh 远程端口转发命令,即从服务启动,以执行下一个命令。

答案1

如果有人遇到同样的问题,这篇文章现在可以拯救我的日子:

如何找出我的 systemctl 服务未启动的原因

添加Type=forking到我的服务文件中/etc/systemd/system/myshh.service

现在我可以在 bash 脚本中执行 ssh/autossh 远程端口转发命令以及-f后台执行选项,即从服务启动,以执行脚本中的下一个命令/更多命令。

包含相关信息的帖子的其他链接:

如何从 systemctl status 服务查看完整日志?

nohup、disown 和 & 之间的区别

从脚本启动后台进程并在脚本结束时对其进行管理

相关内容