Ssh ile sinyal gönderebilmek istiyorum (SIGINT en önemlisidir).
Bu komut:
ssh server "sleep 1000;echo f" > foo
sunucuda uykuya başlayacak ve 1000 saniye sonra yerel makinemdeki foo dosyasına 'f \ n' girecek. CTRL-C tuşlarına basarsam (yani SshINT'i ssh'ye gönder), ssh'yi öldürür, ancak uzak sunucudaki uykuyı öldürmez. Uzaktaki sunucuda uykuyı öldürmesini istiyorum.
Bu yüzden denedim:
ssh server -t "sleep 1000;echo f" > foo
Fakat stdin bir terminal değilse, bu hatayı alıyorum:
Pseudo-terminal will not be allocated because stdin is not a terminal.
ve sonra SIGINT hala iletilmemiştir.
Bu yüzden denedim:
ssh server -t -t "sleep 1000;echo f" > output
Ama sonra foo'daki çıktı 'f \ n' değil, benim durumumda feci olan 'f \ r \ n' (çıktım ikili veri olduğundan).
Yukarıdakilerde "sleep 1000; echo f" kullanıyorum, ancak gerçekte kullanıcı tarafından sağlanan gerçekte, her şeyi içerebilir. Bununla birlikte, eğer "uyku 1000; eko f" için çalışabilirsek, büyük olasılıkla tüm gerçekçi durumlar için çalışmasını sağlayabiliriz.
Diğer ucunda takma bir terminal almak umrumda değil, ancak SIGINT'imi iletmek için ssh kullanmanın başka bir yolunu bulamadım.
Başka bir yolu var mı?
Düzenle:
Kullanıcı, örneğin stdin'den ikili verileri okuyan komutlar verebilir:
seq 1000 | gzip | ssh server "zcat|bzip2; sleep 1000" | bzcat > foo
Kullanıcı cpu yoğun komutlar verebilir, örneğin:
ssh server "timeout 1000 burnP6"
Edit2:
Benim için çalışıyor gibi görünen sürüm:
your_preprocessing |
uuencode a | ssh -tt -oLogLevel=quiet server "stty isig -echoctl -echo ; uudecode -o - |
your_command |
uuencode a" | uudecode -o - |
your_postprocessing
Beni doğru yöne işaret eden digital_infinity sayesinde.
ssh
örnek olarak gösterdiğinizden daha karmaşık olmalıdır, çünkü istediğiniz davranışı basit bir yeniden düzenleme ile elde edebilirsiniz:sleep 1000 && ssh server "echo f" > foo
( Öldürme komutunun çalışmasını engellemek için , öyle&&
olmamalıdır .) Ben haklıyım, lütfen örneklerinizi gerçek kullanımınız için daha temsili kılın, böylece daha iyi bir cevap verilebilir.;
sleep
ssh