tmux new-window ssh на удаленный хост, затем выполните команду и оставайтесь в системе

Я использую Tmux на поле для прыжков. Я пытаюсь автоматизировать некоторые распространенные сценарии. Как я могу сделать следующее?:

  1. создать новое окно
  2. SSH к удаленному хосту
  3. выполнить некоторые команды на удаленном хосте (то есть: cd и dot-slash что-то)
  4. оставаться в системе

Я могу сделать это с помощью 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'

Я поместил команды оболочки в отдельный файл, потому что у меня были проблемы с вложенными кавычками, которые я не мог понять, как обойти это.

.mosdev / скрипты /test_config.sh:

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

Сеанс ssh с удаленным хостом не остается открытым. Несмотря на то, что новое окно появляется, я получаю ответное приглашение на поле перехода.

Итак, что мне здесь не хватает? Как я могу заставить эту сессию оставаться открытой?

1 ответ

Я считаю, что проблема заключается в использовании ssh команда.

С конца AUTHENTICATION раздел в man ssh:

Сеанс завершается, когда команда или оболочка на удаленной машине завершаются, и все соединения 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 это ключ возврата.

Я заметил, что на момент моего ответа этому вопросу два месяца. Вы уже решили это? Если так, как ты?

Другие вопросы по тегам