Bagaimana saya bisa menggunakan ssh untuk menjalankan perintah pada mesin Unix jarak jauh dan keluar sebelum perintah selesai?

17

Bagaimana saya bisa menggunakan ssh untuk menjalankan perintah pada mesin Unix dan keluar sebelum perintah selesai?

Misalnya, jika saya mengetik

ssh localhost 'sleep 60 &'

ssh menggantung di terminal saya sampai tidur selesai, meskipun tidur dijalankan di latar belakang.

Richard Hoskins
sumber
Anda mungkin menginginkan bagian &luar dari tanda kutip.
Brad Gilbert
1
Tidak, itu hanya menempatkan seluruh kit dan kaboodle di latar belakang dan saya tidak dapat mengetikkan kata sandi saya.
Richard Hoskins

Jawaban:

19

SSH memiliki sakelar -f yang melakukan persis sama dengan menggunakan nohup pada klien Anda tetapi memungkinkan ssh meminta kata sandi. Gunakan seperti itu:

ssh localhost -f 'command'

Tetapi : SSH akan tetap hidup di latar belakang, jadi jika Anda mematikan klien sebelum perintah di server selesai, itu akan dibatalkan. Jika Anda ingin koneksi ssh ditutup setelah menjalankan perintah, Anda dapat menggunakan layar di sisi server:

ssh localhost -f 'screen -d -m sleep 60'
Martin
sumber
Jika saya melakukan 'ssh remotemachine -n' long running command> withremoteredirects 2> & 1 </ dev / null & 'dan klien dimatikan akankah perintah selesai?
Richard Hoskins
Afaik tidak. Jika koneksi ssh terputus, daemon ssh harus mengakhiri semua terminal "di dalam" ssh. Sejak terminal mulai perintah mereka akan dihentikan, karena proses induk mereka dihentikan. Tapi itu layak mencoba;)
Martin
Bagaimana dengan 'nohup' alih-alih 'layar' di sisi server?
Richard Hoskins
@ Rad Gilbert Tidak Ada? Saya dapat memikirkan beberapa hal, tetapi satu hal yang tidak memiliki kesamaan, adalah bahwa 'layar' tidak tersedia di semua mesin POSIX.
Richard Hoskins
6

Gunakan pengalihan nohup, stdout / stderr, dan jalankan perintah di latar belakang:

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

Sunting: Atau lebih baik lagi, cukup gunakan parameter ssh's -f:

ssh -f localhost 'sleep 60'
neu242
sumber
Anda mungkin dapat menggabungkan kedua pengalihan dengan &>/dev/null.
Brad Gilbert
@BradGilbert Sintaks itu tidak kompatibel dengan POSIX; sulit untuk berdebat karena mengorbankan kompatibilitas untuk menyelamatkan beberapa karakter.
tripleee
2

Atau setelah login menggunakan ssh, mulai screenjika Anda mungkin ingin kembali lagi nanti, untuk melihat progres atau output.

Arjan
sumber
Anda juga dapat menggunakan "tmux" yang menurut saya pribadi lebih mudah dikonfigurasi. Kedua aplikasi ini hampir setara dengan masing-masing memiliki pro dan kontra.
mzuther