Bash脚本发送命令到远程ssh会话



是否有可能编写一个bash脚本,打开一个远程节点(即通过ssh和/或slurm),并在运行一些命令后在开始一个交互式会话?我正在尝试自动化在远程计算集群上启动jupyter会话的过程,目前看起来如下所示:

  1. ssh到远程集群的登录节点,使用特定的端口
  2. 使用slurm请求一个计算节点上的交互式会话,包括通过该端口的x11转发
  3. 将目录改为工作目录
  4. 为我的项目激活conda环境
  5. 从命令行打开jupyter,指定我之前使用的端口

这是一个漫长的过程,如果我在任何一步出错,我通常必须返回并从头开始,因为我正在使用的端口仍然被捆绑。因此,我正在寻找一种方法,我可以从我的本地机器运行一个脚本(可能有参数),跳过所有的环节,让我得到一个工作的jupyter会话链接,我可以粘贴到我的浏览器。

就像@Diego Torres Milano说的,你需要在本地编写一个脚本来完成交互部分,然后通过远程脚本调用它。

但是由于您的过程是交互式的,这就变得棘手了。幸运的是,linux有一个工具,可以很容易地通过一个名为expect的包管理器安装,它能够编写逻辑来执行多步骤交互式脚本。

所以你会写一个expect脚本,它会"期望"特定的提示,然后它可以读取这些提示并使用条件逻辑适当地响应这些提示。

一旦你写好了这个,它就可以在本地工作了,只需在远程服务器上通过ssh执行它:

ssh user@12.34.56.78 /path/to/script.ex

最新更新