“存储”远程 SSH 会话?

Say*_*nRC 13 performance scripting ssh

我正在尝试在脚本中执行这些操作。我必须在远程主机上运行一些命令。目前,我正在这样做:

ssh root@host 'bash -s' < command1
ssh root@host 'bash -s' < command2
ssh root@host 'bash -s' < command3
Run Code Online (Sandbox Code Playgroud)

但是,这意味着我必须反复连接到服务器,这会增加处理命令之间的大量时间。我正在寻找这样的东西:

varSession=$(ssh root@host 'bash -s')
varSeesion < command1
varSeesion < command2
varSeesion < command3
Run Code Online (Sandbox Code Playgroud)

同样,我需要通过脚本运行这些命令。我已经看过了,screen但我不确定它是否可以在脚本中使用。

mur*_*uru 29

您可以使用ControlMasterandControlPersist来允许在命令终止后保持连接:

与 结合使用时ControlMaster,指定主连接应在初始客户端连接关闭后在后台保持打开状态(等待未来的客户端连接)。如果设置为no,则主连接不会被置于后台,并且会在初始客户端连接关闭后立即关闭。如果设置为yes0,则主连接将无限期地保留在后台(直到通过诸如“ ssh -O exit”之类的机制被杀死或关闭)。如果设置为以秒为单位的时间,或 中记录的任何格式的时间 sshd_config(5),则后台主连接将在指定时间保持空闲(没有客户端连接)后自动终止。

因此,第一个 SSH 命令将为连接设置一个控制文件,另外两个命令将通过该控制文件重用该连接。你~/.ssh/config应该有类似的东西:

Host host
    User root
    ControlMaster auto
    ControlPath /tmp/ssh-control-%C
    ControlPersist 30   # or some safe timeout
Run Code Online (Sandbox Code Playgroud)

并且您的脚本不需要任何其他更改。

  • 这是*你的*`~/.ssh_config` 文件。不是服务器的 `sshd_config` 文件。 (6认同)
  • 默认客户端配置是`~/.ssh/config`(不是下划线),尽管正如@mosvy 所说的`-F` 覆盖了它并且也忽略了系统范围的文件`/etc/ssh/ssh_config`(附加目录级别) (5认同)
  • @SayantanRoychowdhury 然后使用 mosvy 的建议,它使用相同的选项并以相同的方式工作。请在问题中包含类似的内容。我们无法读懂你的想法,看看你问题中的“ssh”是否真的是别的东西。 (4认同)

小智 7

您可以从StackOverflow 上的类似问题中获得提示,并使用 bash Here 文档

ssh root@host 'bash -s' << EOF
  command1
  command2
  command3
EOF
Run Code Online (Sandbox Code Playgroud)