SSH ke Server, Jalankan Perintah, dan Pertahankan Koneksi

12

Saya ingin menulis skrip yang membuka terminal dengan tab yang berbeda, masuk ke server menggunakan sshdi setiap tab dan menjalankan perintah di setiap tab. Sebagai contoh: htop.

Skrip di bawah ini membuka terminal dengan 4 tab semua masuk di server. Tetapi jika saya mencoba menambahkan htopperintah di cmd=baris itu tidak berfungsi lagi ...

#bin/bash

tab="--tab"
cmd="bash -c 'ssh user@host';bash"
foo=""

for i in 1 2 3 4; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

Saya sudah mencoba ini ...

cmd="bash -c 'ssh user@host htop';bash"

... karena ssh --helpdikatakan bahwa sintaks untuk sshadalah:

penggunaan: ssh [user @] nama host [perintah]

Merah
sumber

Jawaban:

14

Dalam bentuknya yang paling sederhana:

ssh -t user@host "command; bash"

-tadalah bagian penting di sini. Itu memaksa host untuk mengalokasikan terminal virtual ke proses, yang memungkinkannya tetap terbuka.

Jika Anda hanya ingin menjalankan htop pada banyak server, Anda dapat menghilangkannya bashdi akhir tetapi itu berarti jika Anda keluar dari htop, Anda akan kembali ke terminal lokal.

Oli
sumber
Saya mencoba cmd = "bash -c 'ssh -t user @ host htop'; bash". Ini bekerja tetapi jika saya berhenti htop saya kembali ke terminal lokal dan saya tidak ingin ini terjadi
Red
1
@ Merah Periksa kutipan Anda - semuanya ada di mana-mana - Anda perlu mengelompokkan htop dan bash bersama sehingga keduanya berjalan di server jarak jauh. bash -c 'ssh -t user@host "htop;bash"'akan lebih baik tetapi saya tidak mengerti mengapa Anda mencoba menggorengnya dalam bash wrapper. Tidak diperlukan - Anda hanya menjalankan satu perintah secara lokal.
Oli
Terima kasih, sekarang ini bekerja dengan cmd = "ssh -t user @ host htop; bash"
Red
Jawaban yang bagus, tetapi harus ada sesuatu yang lebih baik untuk digunakan daripada bash agar tidak berakhir.
mc0e
@ mc0e Tergantung apa yang ingin Anda lakukan. Pertanyaan ini lebih lanjut tentang mendapatkan shell yang berguna setelah menjalankan perintah Anda. Jika Anda hanya ingin berhenti, Anda bisa mengganti bashuntuk read.
Oli