Sunucuya SSH, Komutu Yürüt ve Bağlantıyı Koru


12

Farklı sekmelerle bir terminal açan bir komut dosyası yazmak ssh, her sekmede bir sunucuya oturum açmak ve her sekmede bir komut yürütmek istiyorum. Örneğin: htop.

Aşağıdaki komut dosyası, sunucuda oturum açmış 4 sekmeli bir terminal açar. Ama htopkomutu cmd=satıra eklemeye çalışırsam artık çalışmaz ...

#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

Bunu denedim ...

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

... çünkü ssh --helpsözdiziminin ssh:

usage: ssh [kullanıcı @] ana bilgisayar adı [komut]

Yanıtlar:


14

En basit haliyle:

ssh -t user@host "command; bash"

-tburadaki kritik kısım. Ana bilgisayarı, sürece açık kalmasını sağlayan bir sanal terminal tahsis etmeye zorlar.

Htop'u bir sunucu yükünde çalıştırmak istiyorsanız bash, sonunda atlayabilirsiniz, ancak bu, htop'tan çıkmanız durumunda yerel bir terminale geri döneceğiniz anlamına gelir.


Cmd = "bash -c 'ssh -t user @ host htop'; bash" komutunu denedim. Çalışıyor ama htop'u bıraktığımda yerel terminale geri dönüyorum ve bunun olmasını istemiyorum
Red

1
@Kırmızı Tırnaklarınızı kontrol edin - hepsi bir yerde - htop ve bash'ı gruplandırmanız gerekir, böylece ikisi de uzak sunucuda çalışır. bash -c 'ssh -t user@host "htop;bash"'daha iyi olurdu ama ilk etapta neden bu şeyi bir bash ambalajında ​​kızartmaya çalıştığınızı anlamıyorum. Gerekli değil - yerel olarak yalnızca bir komut çalıştırıyorsunuz.
Oli

Teşekkür ederim, şimdi cmd = "ssh -t user @ host htop; bash" ile çalışıyor
Kırmızı

İyi bir cevap, ama sonlandırmak için bash'den daha iyi bir şey olmalı.
mc0e

@ mc0e Ne yapmak istediğinize bağlıdır. Bu soru, komutunuzu çalıştırdıktan sonra yararlı bir kabuk almakla ilgilidir. Sadece duraklatmak istiyorsanız, yerine olabilir bashiçin read.
Oli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.