Как я могу использовать ssh для запуска команды на удаленной машине Unix и выхода до ее завершения?

17

Как я могу использовать ssh для запуска команды на компьютере с Unix и выхода до ее завершения?

Например, если я наберу

ssh localhost 'sleep 60 &'

ssh висит на моем терминале, пока сон не завершится, хотя сон работает в фоновом режиме.

Ричард Хоскинс
источник
Вы, вероятно, хотите за &пределами цитаты.
Брэд Гилберт
1
Нет, это просто помещает весь набор и kaboodle на задний план, и я не могу набрать свой пароль.
Ричард Хоскинс

Ответы:

19

SSH имеет ключ -f, который делает то же самое, что и nohup на вашем клиенте, но позволяет ssh запрашивать пароль. Используйте это так:

ssh localhost -f 'command'

Но : SSH по-прежнему будет работать в фоновом режиме, поэтому, если вы выключите клиент до завершения выполнения команды на сервере, он будет прерван. Если вы хотите, чтобы соединение ssh было закрыто после выполнения команды, вы можете использовать экран на стороне сервера:

ssh localhost -f 'screen -d -m sleep 60'
Мартин
источник
Если я выполню длительную команду 'ssh remotemachine -n'> withremoteredirects 2> & 1 </ dev / null & 'и клиент выключится, будет ли команда выполнена?
Ричард Хоскинс
Афаик нет. Если соединения ssh потеряны, демон ssh должен завершить все терминалы «внутри» ssh. С тех пор как терминал запустил команду, они будут прерваны, поскольку их родительский процесс завершен. Но стоит попробовать;)
Мартин
А как насчет «nohup» вместо «screen» на стороне сервера?
Ричард Хоскинс
@ Брэд Гилберт. Ничего? Я могу думать о нескольких вещах, но одна вещь, которая не имеет общего, состоит в том, что «экран» доступен не на всех компьютерах POSIX.
Ричард Хоскинс
gnu.org/software/screen/manual
Брэд Гилберт,
6

Используйте nohup, перенаправление stdout / stderr и выполните команду в фоновом режиме:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

РЕДАКТИРОВАТЬ: Или даже лучше, просто используйте параметр sf sf:

ssh -f localhost 'sleep 60'
neu242
источник
Возможно, вы могли бы объединить два перенаправления с &>/dev/null.
Брэд Гилберт
@BradGilbert Этот синтаксис не POSIX-совместимый; трудно спорить о том, чтобы пожертвовать совместимостью, чтобы сохранить несколько символов.
tripleee
2

Или, после входа в систему ssh, начните, screenесли хотите вернуться позже, чтобы посмотреть на прогресс или результаты.

Арьян
источник
Вы также можете использовать «tmux», который мне лично проще настроить. Оба приложения в значительной степени эквивалентны, у каждого есть свои плюсы и минусы.
mzuther