
Я хочу автоматически запускать команду после подключения к другой машине через 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"