เมื่อใดที่ ssh -t จะไม่เหมาะสมแทน ssh?


15

การใช้ssh -tแทนsshการเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลมีข้อดีหลายประการ ตัวอย่างเช่นฉันสามารถแก้ไขไฟล์โดยตรงด้วย vim: ssh -t host vim foo.txtซึ่งจะล้มเหลวเป็นอย่างอื่น

มีสถานการณ์ใดบ้างที่การจัดสรร (หลอก) -tty จะเป็นสิ่งที่ไม่ดีเมื่อใช้ ssh?

คำตอบ:


11

เมื่อไพพ์อินพุตหรือรับอินพุตกลับซึ่งเป็นการใช้โดยทั่วไปของ "ssh host command" สามารถตีความอักขระควบคุมได้โดยเลเยอร์ TTY (^ S เป็นตัวอย่าง)


10

ใช่บางครั้งคุณต้องการทำการเชื่อมต่อที่เงียบและมีพื้นหลังเช่นเมื่อตั้งค่าอุโมงค์ (เช่นพร็อกซี SOCKS) ในตัวอย่างเช่นคุณต้องการให้กระบวนการไม่มี tty

นี่คือตัวอย่างของการตั้งค่าการส่งต่อพอร์ตจากโลคัลโฮสต์ไปยังรีโมตโฮสต์บางตัว ...

ssh -l username -fNTL 8073:server:873

หลังจากตั้งค่านี้แล้วคุณสามารถ rsync ไปยัง localhost แทนที่จะไปที่รีโมตโฮสต์ดังนั้นอย่างมีประสิทธิภาพ tunneling rsync ของคุณผ่านssh...

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

คุณต้องทำเช่นนี้ถ้า rsync กำลังserverถูกบล็อก แต่sshไม่ใช่


ขอบคุณสิ่งนี้ก็ถูกต้องเช่นกัน แต่ฉันก็โหวตให้คนอื่นเพราะมันเป็นปัญหาที่ร้ายแรงยิ่งกว่าที่ฉันมองข้าม
Alex J

3

นอกเหนือจากข้างต้น ...

(1) การจัดการ tilda หลบหนีที่แตกต่างกัน:

เครื่องหมาย "~" หลบหนีจะปลดคุณถ้าคุณมี pty (-t) สำหรับคำสั่งที่ใช้เวลานานคุณอาจต้องการป้องกันไม่ให้บางคนหยุดกระบวนการโดยไม่ตั้งใจหากพวกเขาพิมพ์ ~

$ ssh hostname.tomontime.com -t sleep 60
[type ~. และมันยกเลิกการเชื่อมต่อ]
ปิดการเชื่อมต่อกับ hostname.tomontime.com

$ ssh ชื่อโฮสต์ -T sleep 60
[ฉันพิมพ์ ~ และมันก็เหมือนกับการกดแป้นปกติซึ่งคำสั่ง sleep จะไม่สนใจ]
~
~

ลองสิ่งเดียวกันกับ CTRL-C คุณจะเห็นว่าด้วย -t คุณกำลังส่ง CTRL-C ไปที่ "sleep" ด้วย -T คุณกำลังส่ง CTRL-C ไปยังโปรแกรม ssh ที่รันบนเครื่องของคุณ อาจมีบางครั้งที่สิ่งนี้สร้างความแตกต่าง (เช่นโปรแกรมจัดการ INT แตกต่างจาก HUP)

(2) คุณเพียงต้องการลดกิจกรรมการเชื่อมต่อเครือข่ายให้น้อยที่สุด

เมื่อพยายามรีบู๊ตเครื่องที่ไม่มี ptys คุณไม่ต้องการให้ระบบพยายามจัดสรร pty! นอกจากนี้ยังลดการเชื่อมต่อเครือข่ายที่จะต้องปิด (ชะลอการรีบูต)

สิ่งนี้จะทำงานได้เร็วขึ้นและเชื่อถือได้มากขึ้น:
ssh -T hostname reboot

สิ่งนี้อาจมีปัญหา:
ssh -t hostname reboot


2

ssh -t สร้างสถานีหลอกบนเครื่องระยะไกล สิ่งนี้มีประโยชน์หากคุณกำลัง chaining คำสั่ง ssh ผ่านหลาย ๆ เซิร์ฟเวอร์และต้องการเทอร์มินัลจริงที่อยู่ไกลออกไป (เพื่อให้คุณสามารถใช้ 'vi' ตัวอย่างเช่น)

คุณอาจไม่ต้องการ '-t' เมื่อสคริปต์การเข้าสู่ระบบทำงานแตกต่างกันหากมีเทอร์มินัล นี่เป็นวิธีปฏิบัติที่ไม่ดี IMHO แต่ฉันเคยเห็นกรณีที่สคริปต์เข้าสู่ระบบตรวจสอบ TTY ก่อน 1) การตั้งค่าพรอมต์และ 2) การขยายเส้นทางไปยังแอปพลิเคชันแบบโต้ตอบจำนวนมาก

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.