เซสชั่น SSH ไม่เคยปิดเมื่อรัน“ apt-get install”


14

ปัญหา

เมื่อทำงานapt-get installในเซสชันที่ไม่ใช่แบบโต้ตอบ SSH เซสชันจะไม่ปิด ตัวอย่าง:

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

my_packageไม่ได้รับการติดตั้งอย่างถูกต้อง แต่เซสชั่น SSH เพียง dangles เปิด

คำถาม

มีสถานะใดบ้างที่จะส่ง SSH เพื่อapt-getไปทำงาน


ข้อมูลเพิ่มเติม

บริบท

การติดตั้งระยะไกลใช้สำหรับการปรับใช้แพคเกจอัตโนมัติบนเซิร์ฟเวอร์การรวม ทันทีที่เราผลักดันการเปลี่ยนแปลงรหัสไปยังที่เก็บงานจะดึงรหัสสร้างแพ็คเกจและปรับใช้ในการรวมเพื่อตรวจสอบว่าทุกอย่างทำงานได้ดี (เท่าที่เกี่ยวข้องกับการปรับใช้)

พยายามแล้ว & บันทึก

  • เซสชัน SSH เดียวกันที่กำลังดำเนินการapt-get updateปิดสนิท โปรดทราบว่าapt-get updateไม่โต้ตอบในขณะที่apt-get installเป็น สิ่งนี้อาจชี้ให้เห็นว่าการโต้ตอบเป็นปัญหา
  • คำสั่งเหมือนไม่เคยมาถึงssh user@target "sudo apt-get install my_package && echo Hello"echo
  • debconf บ่นว่าไม่สามารถหาส่วนหน้าที่ดี (แสดง, Readline) และมันกลับไปที่ Teletype (แม้ว่า Readline จะพร้อมใช้งาน)
  • ในความสัมพันธ์กับส่วนหน้าของ debconf การส่งผ่าน-tเพื่อบังคับ TTY กับ SSH ไม่ได้ช่วย DEBIAN_FRONTEND=noninteractiveทั้ง
  • ทำทั้งหมดใน Ubuntu 12_04 LTS

หากคุณดำเนินการคำสั่งติดตั้งด้วยตนเอง (เช่นssh user@targetนั้นคำสั่งจากเปลือก) มันทำงานอย่างถูกต้อง?
แหวนØ

คำสั่งติดตั้งใช้งานได้ดีเมื่อทำด้วยตนเอง (ซึ่งนำไปสู่การคิดว่ามีปัญหากับประเภทเซสชันที่ไม่ใช่การเข้าสู่ระบบ / แบบโต้ตอบ)
Eric Platon

คำตอบ:


6

คำตอบต่อไปนี้ของ SF ได้หลอกลวง:

ssh ล้มเหลวในการดำเนินการคำสั่งระยะไกลเมื่อทำงานจาก cron bash script

-tกองกำลังธงจัดสรรหลอก TTY ยกเว้นบางทีเมื่อไม่มี TTY ท้องถิ่น แต่ผ่านธงสองครั้งเหมือน-t -tเพิ่งแกล้งทำ และนั่นก็แก้ปัญหา

ดูเอกสารประกอบของ SSH:

-t Force การจัดสรรหลอก tty สิ่งนี้สามารถใช้เพื่อรันโปรแกรมบนหน้าจอโดยพลการบนเครื่องระยะไกลซึ่งมีประโยชน์มากเช่นเมื่อใช้งานบริการเมนู อ็อพชัน -t หลายตัวบังคับให้จัดสรร tty แม้ว่า ssh จะไม่มี tty โลคัล

ทีนี้ทำไมมันถึงใช้ได้ ปรากฎว่าdebconfไม่บ่นอีกต่อไปเกี่ยวกับส่วนหน้าในบันทึก ดังนั้นฉันเชื่อว่า-tชุดคู่(lures?) debconfตามต้องการซึ่งช่วยให้apt-get installการจบเซสชัน SSH เสร็จสิ้นอย่างสมบูรณ์


ฉันเชื่อว่านี่เป็นคำตอบที่ดี แต่ฉันจะไม่ทำเครื่องหมายทันทีตามที่เป็นอยู่ ก่อนอื่นเพราะฉันตอบตัวเองและข้อที่สองอาจมีคำตอบที่ดีกว่า / ทั่วไปมากกว่า ย้อนกลับไปในอนาคต
Eric Platon

1

เมื่อฉันมองผ่านมันอาจทำงานได้ การเรียกคำสั่งใดก็ตามควรตามด้วย exit และ heredoc พบวิธีแก้ไขปัญหา แต่ไม่ได้ลองใช้เป็นการส่วนตัว

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

คำตอบต้นฉบับมาจากที่นี่: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection


ขอบคุณ koressak ฉันเดาว่าสิ่งนี้ขึ้นอยู่กับเชลล์และการกระจายของระบบปฏิบัติการ ฉันเพิ่งลองssh user@host free -mในสภาพแวดล้อมเป้าหมายของฉันและทำงานได้เหมือนมีเสน่ห์ ฉันจะลองทำตามคำแนะนำต่อไป
Eric Platon

ฉันเพิ่งลองใช้วิธี heredoc อย่างสมบูรณ์ นั่นไม่ได้แก้ปัญหา เซสชั่น SSH แฮงค์แบบเดียวกับที่แสดงในคำถาม ขอบคุณอีกครั้งสำหรับการตอบสนองและตัวชี้!
Eric Platon

1

ภายใต้ debian / jessie ฉันประสบความสำเร็จกับคำสั่งนี้:

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

แต่บางทีคุณควรพิจารณาใช้ ansible สำหรับงานนี้และงาน upcomming อื่น ๆhttp://docs.ansible.com/ansible/apt_module.html


น่าสนใจความคิดที่ดี สำหรับ Ansible บางทีตอนนี้ ฉันไม่ทราบกลับเมื่อคำถามมาถึงใจ อย่างไรก็ตามฉันเชื่อว่าการรู้ว่า "เกิดอะไรขึ้นภายใน" (c)
Eric Platon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.