“Apt-get install” yürütülürken SSH oturumu asla kapanmıyor


14

Sorun

apt-get installEtkileşimli olmayan bir SSH oturumunda çalışırken , oturum asla kapanmaz. Misal:

ssh user@target "sudo apt-get -y install my_package"

my_packageDüzgün yüklü, ancak SSH oturumu sadece açık sallanır olsun demek.

Soru

apt-getİşe gitmek için SSH'yi geçmek için herhangi bir bayrak var mı ?


ek bilgi

bağlam

Uzaktan yükleme, bir paketin bir tümleştirme sunucusuna otomatik olarak dağıtılması için kullanılır. Bazı kod değişikliklerini bir depoya aktarır atmaz, bir iş kodu çeker, paketi oluşturur ve her şeyin iyi çalıştığını kontrol etmek için entegrasyona dağıtır (dağıtım söz konusu olduğunda).

Zaten Denendi ve Notlar

  • Aynı SSH oturumunun yürütülmesi apt-get updatetemiz bir şekilde kapanır. apt-get updateEtkileşimli değil, oysa unutmayın apt-get install. Bu, etkileşimin bir sorun olduğunu düşündürebilir.
  • Gibi bir komut ssh user@target "sudo apt-get install my_package && echo Hello"asla ulaşmaz echo.
  • debconf hoş bir ön uç bulamadığından şikayet ediyor (Ekran, Okuma Hattı) ve Teletype'a geri dönüyor (Readline mevcut olmasına rağmen).
  • Debconf'ın ön -tucu ile ilgili olarak, SSH ile TTY'yi zorlamak yardımcı olmaz. Hiçbiri DEBIAN_FRONTEND=noninteractive.
  • Tümü Ubuntu 12_04 LTS'de yapıldı.

İnstall komutunu manuel olarak yürütürseniz (örn ssh user@target. Kabuktan gelen komutlar) düzgün çalışıyor mu?
Yüzük Ø

İnstall komutu manuel olarak yapıldığında iyi çalışır (bu nedenle oturum açma / etkileşimli oturum türlerinde bir sorun olduğunu düşünür).
Eric Platon

Yanıtlar:


6

SF ile ilgili aşağıdaki cevap işe yaradı:

ssh, cron bash betiğinden çalıştırıldığında uzaktan komutu yürütemiyor

-tBayrak kuvvetler lokal bir TTY vardır ve belki de durumu dışında bir sözde Tty ayırma. Ama bayrağın iki kez geçmesi sanki -t -tbunu yapıyormuş gibi yapıyor. Ve bu sorunu çözdü.

SSH belgelerine bakın:

-t Yalancı tty ayırmayı zorla. Bu, uzak bir makinede, örneğin menü hizmetlerini uygularken çok yararlı olabilecek, rasgele ekran tabanlı programlar yürütmek için kullanılabilir. Birden fazla -t seçeneği, ssh yerel tty olmasa bile tty ayırmayı zorlar.

Şimdi, neden işe yaradı? debconfGünlüklerde ön uç hakkında artık şikayet etmediği ortaya çıkıyor . Bu yüzden çift -tsetlerin (lures?) debconfGerektiğine inanıyorum , bu da apt-get installtamamlamanın SSH oturumunu temiz bir şekilde sonlandırmasına izin veriyor .


Bunun iyi bir cevap olduğuna inanıyorum, ama hemen olduğu gibi işaretlemeyeceğim. Birincisi kendime cevap verdim çünkü ikincisi daha iyi / daha genel cevaplar olabilir. Gelecekte buna geri dönelim.
Eric Platon

1

Baktığım zaman, bu işi yapabilir. Hangi komutu çağırırsanız onu çıkış ve heredoc izler. Çözümü buldum, ancak kişisel olarak denemedim.

ssh user@myremotemachine <<-EOF
free -m
exit
EOF

Orijinal cevap buradan gelir: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection


Teşekkürler koressak. Sanırım bu kabuk ve işletim sistemi dağıtımına bağlıdır. ssh user@host free -mHedef ortamımda yeni denedim ve bu bir cazibe gibi çalışıyor. Sonraki öneri deneyeceğim.
Eric Platon

Yorumlu yaklaşımla tam bir denemeyi denedim. Bu sorunu çözmedi. SSH oturumu, soruda sunulduğu şekilde askıda kalmaktadır. Yanıt ve işaretçi için tekrar teşekkürler!
Eric Platon

1

Debian / jessie altında bu komutla başarılı oldum:

ssh user@host "TERM=READLINE sudo apt-get install --reinstall less && echo done"

Ancak belki de bu ve diğer sonraki görevler için ansible kullanmayı düşünmelisiniz http://docs.ansible.com/ansible/apt_module.html


İlginç, iyi fikir. Ansible'a gelince, belki şimdi. Sorunun ne zaman akla geldiğini bilmiyorum. Her neyse, "içeride ne olduğunu" bilmek iyi olur (c).
Eric Platon
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.