linux - 我想在脚本中打开一个ssh session ,然后在本地执行其他命令,然后向已经打开的ssh session 发送命令

标签 linux ssh

我想在脚本中打开一个ssh session ,然后在本地执行其他命令,然后向已经打开的ssh session 发送一个命令。

具体来说,我想在 Linux 中运行一个 shell 脚本,它首先在后台打开一个 ssh session ,然后继续并将数据库置于只读模式,然后在打开的 ssh session 中运行一个命令,然后将数据库恢复为写入状态模式。 当我这样做时每一秒都很重要,实际上打开 ssh session 需要大约 80% 的时间,所以这就是为什么我不想打开 ssh session 并在数据库处于只读状态时向它发送命令模式。

我无权访问 expect

最佳答案

我认为连接多路复用是您的答案。

它的工作方式是,如果您有到同一台服务器的现有 ssh 连接, 例如在同一台机器上的另一个窗口中, 或当前登录 shell 中的后台 session , 随后到同一服务器的 ssh 连接可以重用第一个, 显着加快启动时间, 就像你想要达到的那样。

将此添加到您的 ~/.ssh/config 以在连接到您的服务器时启用它:

Host yourserver
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

我到处都使用它,所以我使用 * 而不是 yourserver

试试这个:ssh 在一个窗口中连接到服务器,登录后,在另一个窗口中连接到同一服务器。第二个连接必须更快,因为它不需要验证和建立连接,因为它将重用已经存在的连接。

关于linux - 我想在脚本中打开一个ssh session ,然后在本地执行其他命令,然后向已经打开的ssh session 发送命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19442552/

相关文章:

linux - 如何仅在出现错误时中止函数,而不中止脚本?

linux - pthread_join 是如何实现的?

linux - eval `ssh-agent` 和 exec ssh-agent bash 的替代品

java - 如何在 linux 中将日志输出保存在文件中

ssh - 打包后 Vagrant 身份验证失败 - 私钥丢失

c - 为什么有时 linux 内核中枚举的第一个成员用 0 初始化

bash - 使用 bash here-doc "unexpected end of file"时出错

plugins - 通过SSH将Teamcity部署到另一台服务器

linux - 如何通过 github 工作流程 SSH 到 Azure 中的 Linux Web 应用服务?

mysql - 通过 ssh 隧道连接 vb.net