tmux new-window ssh到远程主机,然后执行命令并保持登录状态

时间:2014-12-11 21:28:46

标签: bash ssh tmux new-window stay-logged-in

我在跳箱上使用tmux。我试图自动化某些常见场景。我该怎么办?:

  1. 创建新窗口
  2. ssh到远程主机
  3. 在远程主机上执行一些命令(即:cd和dot-slash something)
  4. 保持登录状态
  5. 我可以用ssh做到这一点:

    ssh -t root@2.158.0.10 "cd ~adarias/duncans/ServiceAgent/tests; bash -l -c 'mocha config_tests.js'; bash -l"
    

    但没有使用tmux new-window:

    tmux new-window -t mosdev -d -n 'debug & test' 'ssh -T root@2.158.0.10 < .mosdev/scripts/test_config.sh; bash -l'
    

    我将shell命令放在一个单独的文件中,因为我遇到了嵌套引号的问题,而我无法弄清楚如何解决这些问题。

    .mosdev /脚本/ test_config.sh:

    #!/bin/bash
    cd ~adarias/duncans/ServiceAgent/tests; bash -l -c 'mocha config_tests.js'; bash -l
    

    远程主机的ssh会话不会保持打开状态。虽然新窗口确实如此,但我会在跳转框的提示符下退回。

    那么,我在这里错过了什么?如何让该会话保持开放?

1 个答案:

答案 0 :(得分:2)

我认为问题在于使用ssh命令。

AUTHENTICATIONman ssh部分的末尾:

  

当远程计算机上的命令或shell退出并且所有X11和TCP连接都已关闭时,会话终止。

所以我认为你所看到的是ssh预期的行为。

作为一种解决方法,请尝试使用tmux send-keys告诉窗口登录然后执行脚本:

tmux new-window -a -d -t mosdev -n debug-test
tmux send-keys -t mosdev:debug-test "ssh root@2.158.0.10" C-m
tmux send-keys -t mosdev:debug-test "cd ~adarias/duncans/ServiceAgent/tests; mocha config_tests.js" C-m

几个笔记:

  • 我将窗口名称更改为没有空格的内容。
  • C-m是返回键。

我注意到,在我的回答时,这个问题已经有两个月了。你有没有解决这个问题?如果是的话,你是怎么做到的?