С ssh, как можно выполнить команду на удаленной машине без выхода?

Обычно, если Вы передаете команду ssh как так

ssh me@example.com 'some-command.sh'

Вы получаете неинтерактивную сессию и выходы ssh, как только команда (или сценарий, или безотносительно) выполняется. Как я могу получить интерактивную сессию и все же выполнить команду, которую я указал от своей локальной машины. Например, я хотел бы смочь открыть экран и перезапустить определенную экранную сессию:

ssh me@example.com 'screen -r 12345'

но это не позволяется, возвращение ошибки "Должно быть подключено к терминалу". который я предполагаю, что средства по существу "должны назвать эту команду от интерактивной оболочки".

Как другой пример, я использую тонну машин на работе, которые часто требуют, чтобы я использовал общую учетную запись, чтобы иметь права сделать определенные вещи (да, я знаю: плохая идея, но не обвиняет меня, я не установил вещи тот путь), и у них обычно есть ksh как оболочка по умолчанию. Я хотел бы войти в систему, переключиться на удар (или zsh) и получить .bash_profile моей собственной учетной записи (или .zshrc). Это было бы легко, если я мог бы установить интерактивную ssh сессию и передать команду удаленной машине для выполнения после входа в систему.

Я имею очень kludgey (и непротестированный) решение в памяти, что я отправлю, но я надеюсь, что кто-то знает лучший путь.

ОБНОВЛЕНИЕ: для тех, кто не понял это, я не планирую сделать, все это вручную, таким образом говоря мне открыть интерактивную сессию и затем сделать это вручную ничего на самом деле не решает.

2-е ОБНОВЛЕНИЕ: попытаться еще раз разъясниться: я пытаюсь выполнить (произвольные) команды на сервере (программно указанный на клиенте), но затем иметь интерактивную сессию, открытую, который затронут чем-либо сделанным теми программными командами.

29
задан 23.12.2011, 20:10

3 ответа

Это - kludgey, и непротестированный, но я думаю, что он должен работать.

Создайте названный сценарий (например). дистанционный стартер, который берет заключенный в кавычки аргумент после аргумента user@host:

remote-starter user@example.com 'some-command.sh arg1 arg2'

Этот сценарий должен сначала сохранить заключенную в кавычки команду (без кавычек) в названном файле (например). .onetime на удаленной машине, и затем выполненный регулярная команда ssh, на этот раз не передавая команды, которая будет выполнена на удаленной машине. (При выполнении ssh user@example.com из сценария, это может работать для выполнения должностного лица ssh user@example.com.)

Чтобы это работало, удаленная машина должна получить .onetime от его .bash_profile или .zshrc или что бы то ни было. После выполнения .onetime, это должно удалить .onetime, таким образом, файл не выполняется в следующий раз, когда Вы делаете регулярный вход в систему.

0
ответ дан 07.12.2019, 09:20

Можно попробовать следующую команду, чтобы запустить удар и получить собственный профиль когда Вы ssh:

ssh  -t hostname "bash --rcfile ~user/.bashrc"
26
ответ дан 07.12.2019, 09:20

Используйте ssh-X для использования termIO cmds.

Также - можно объединить cmds в цепочку как "ssh 'источник ~/.bashrc &&, CD && делают'"

0
ответ дан 07.12.2019, 09:20

Теги

Похожие вопросы