Запустите ssh и немедленно выполните команду

Я пытаюсь найти команду UNIX или bash для запуска команды после подключения к ssh-серверу. Например:

ssh [email protected] "tmux list-sessions"

Приведенный выше код работает, он перечисляет сеансы, но затем немедленно отключается. Помещение его в sshrc на стороне сервера работает, но мне нужно иметь возможность вводить его на стороне клиента. Я хочу иметь возможность запускать команду, она входит в систему, открывает окно, затем запускает команду, которую я установил. Ive попробовал

[command] | ssh [email protected]

ssh [email protected] [command]

ssh [email protected] "[command]"

ssh -t [email protected] [command]

Ответ 1

ssh -t 'command; bash -l'

выполнит команду, а затем запустит оболочку входа в систему.

Ответ 2

Вы можете использовать параметр командной строки LocalCommand, если включена опция PermitLocalCommand:

ssh имя_пользователя @hostname -o LocalCommand = "tmux list-sessions"

Подробнее о доступных параметрах см. на странице руководства ssh_config.

Ответ 3

Это не совсем то, что вы ищете, но я нашел его полезным в подобных обстоятельствах.

Недавно я добавил следующее к моему $HOME/.bashrc (что-то подобное должно быть возможно с оболочками, отличными от bash):

if [ -f $HOME/.add-screen-to-history ] ; then
    history -s 'screen -dr'
fi

Я держу сеанс screen, запущенный на одном конкретном компьютере, и у меня были проблемы с ssh подключениями к этой машине, которая отбрасывалась, требуя, чтобы я повторно запускал screen -dr при каждом повторном подключении.

С этим добавлением и после создания этого (пустого) файла в моем домашнем каталоге я автоматически получаю команду screen -dr в моей истории, когда запускается моя оболочка. После повторного подключения я могу просто набрать Control-P Enter, и я вернусь на сеанс экрана, или я могу игнорировать его. Он гибкий, но не совсем автоматический, и в вашем случае это проще, чем набрать tmux list-sessions.

Возможно, вы захотите сделать команду history -s безусловной.

Это требует обновления вашего $HOME/.bashrc в каждой из целевых систем, что может или не может сделать его непригодным для ваших целей.