Как выполнить команду после ssh-подключения, не отключаясь?

Как выполнить команду после ssh-подключения, не отключаясь?

Я хочу автоматически запускать команду после подключения к другой машине через SSH, не закрывая при этом сеанс SSH автоматически.

После поиска в интернете я нашел несколько решений, но ни одно из них не работает так, как мне нужно.

ssh bla@bla "ls"

Это запустит lsкоманду на удаленной машине, покажет мне вывод и закроет соединение.

Я также попробовал отредактировать файл конфигурации ssh с помощью

Host bla
        HostName bla
        User bla
        IdentityFile ~/.ssh/key
        RemoteCommand ls
        RequestTTY force 

Та же проблема, подключается через ssh, запускает lsкоманду, показывает мне вывод и выходит. Даже опция не RequestTTYпомогла.

ssh bla@bla "ls ; bash"

Это не отключает меня после запуска ls, но я не получаю полноценный интерфейс терминала, только какую-то голую командную строку, которая не показывает me@machine:~$ thing.

Чего я на самом деле хочу:

Либо какой-то псевдоним bash, либо .ssh/configзапись, которая позволит мне ввести простую команду, которая подключится к удаленной машине, а затем запустить там команду и оставить терминал открытым. В общем, как если бы я сделал это вручную:

тип

ssh blah@blah

и затем после того, как он подключится, я наберу

ls

решение1

ssh bla@bla "ls ; bash"

Это не отключает меня после запуска ls, но я не получаю полноценный интерфейс терминала, только какую-то голую командную строку, которая ничего не показывает me@machine:~$.

Если вы укажете команду (например, ls ; bashвыше), SSH-сервер не предоставит псевдотерминал. Вы наблюдали именно это.

С другой стороны, sole ssh bla@blaвыделяет псевдотерминал по умолчанию. Так что это то, что вам нужно. Принудительное выделение псевдотерминала, используйте -tили RequestTTY.

Даже этот RequestTTYвариант не помог.

Это не поможет вам, если удаленная команда lsтолько. Вам нужно ls; bashили похожее.

Кажется, когда вы запросили tty, вы не запросили bash. И когда вы запросили bashпосле ls, вы не запросили tty. Вам нужны оба:

ssh -t bla@bla "ls; bash"

Примечание lsтакже будет использовать псевдотерминал. Пожалуйста, прочтите раздел "более широкая картина"этот мой ответчтобы узнать разницу (особенно там, где написано «есть странность»).

решение2

Чтобы избавиться от me@machine, вам нужно установить переменную окружения PS1. Попробуйте:

ssh bla@bla "PS1=\"\"; ls; bash"

Связанный контент