ฉันต้องการเชื่อมต่อกับเอาต์พุตของเทอร์มินัลที่กำลังทำงานอยู่ (tty1) จากเทอร์มินัลเสมือนและจับมัน (ใช้งานเซิร์ฟเวอร์ X)
ฉันต้องการเชื่อมต่อกับเอาต์พุตของเทอร์มินัลที่กำลังทำงานอยู่ (tty1) จากเทอร์มินัลเสมือนและจับมัน (ใช้งานเซิร์ฟเวอร์ X)
คำตอบ:
ฉันเจอเครื่องมือนี้ชื่อttylog
หนึ่ง มันเป็นโปรแกรมที่มีอยู่บน Perl CPAN ที่นี่ มีข้อแม้อยู่สองข้อข้อหนึ่งคือฉันสามารถคิดได้ว่าจะแนบไปกับเทอร์มินัลที่สร้างขึ้นโดยเป็นส่วนหนึ่งของใครบางคนกำลังเข้ามาในกล่องของฉัน อีกอย่างที่คุณต้องรันด้วยสิทธิ์ระดับสูง (เช่นรูทหรือ sudo)
แต่มันใช้งานได้!
ssh แรกลงในกล่องของคุณในระยะ # 1:
TERM#1% ssh saml@grinchy
หมายเหตุ tty ของเทอร์มินัลใหม่นี้:
TERM#1% tty
/dev/pts/3
ในเทอร์มินัลอื่น (TERM # 2) ให้เรียกใช้คำสั่งนี้:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
ตอนนี้กลับไปที่ TERM # 1 แล้วพิมพ์สิ่งต่างๆมันจะแสดงใน TERM # 2
คำสั่งทั้งหมดที่ฉันพยายาม (บน, LS, ฯลฯ ) ttylog
ทำงานโดยไม่เกิดขึ้นโดยใช้
gdb
เป็นตัวเลือกแรกที่ฉันเจอฉันเคยใช้มันมาก่อน แต่มันก็เป็นเรื่องแฮ็ค ดีใจที่ได้ช่วยคุณออก!
แน่นอนมันเป็น อุปกรณ์ / dev / vcs * และ / dev / vcsa * สอดคล้องกับอุปกรณ์ / dev / tty * (เทอร์มินัลเสมือน) F1 = tty1 = vcs1 / vcsa1 เป็นต้น vcs / vcsa เปรียบเสมือน tty สำหรับเทอร์มินัลเสมือน "ปัจจุบัน"
ในฐานะที่เป็น root คุณสามารถใช้อุปกรณ์เหล่านี้ (เช่น cat / dev / vcs2) และดูว่ามีอะไรอยู่ใน VT ที่เกี่ยวข้อง (เช่น / dev / tty2 บน on F2) เช่นถ่ายภาพ vcsa * แตกต่างจาก vcs * ซึ่งรวมข้อมูลเกี่ยวกับขนาดของเครื่อง (หน้าจอ) โปรดทราบว่ามันเป็นเพียงแค่ภาพรวมของตัวละครตามที่ปรากฏบนหน้าจอ - รวบรวมจากหน่วยความจำที่จัดสรรให้กับเครื่องเทอร์มินัล - ดังนั้นอย่าคาดหวังว่าจะได้ผลลัพธ์ที่ดี
ข้อเสียเปรียบคือถ้าข้อมูลที่ผ่านมาเร็วเกินไปอาจเป็นเรื่องยากที่จะจับ บางที tail -f / dev / vcs1 อาจใช้งานได้หากคุณต้องการติดตามหลาย ๆ หน้าจอ (ยังไม่ได้ลองเลย) อาจเป็นการง่ายที่สุดในการเปลี่ยนเส้นทางไปยังไฟล์ก่อน มันอาจเป็นความคิดที่ดีที่จะใช้ VT (F1-F6) เพื่อดูมันเนื่องจากเทอร์มินัลจะมีขนาดเท่ากัน จากประสบการณ์ของฉันควรใช้อุปกรณ์ vcs * ไม่ใช่อุปกรณ์ vcsa *
หากไม่ได้ผลอาจเป็นหนึ่งในแพ็คเกจ "พี่ใหญ่" ที่อนุญาตให้ผู้ดูแลระบบคอยดูกิจกรรมบนเทอร์มินัล
PS: ฉันลืมถามระบบปฏิบัติการที่คุณใช้ สิ่งนี้มีไว้สำหรับ Linux แม้ว่าอุปกรณ์ที่คล้ายคลึงกันอาจมีอยู่ในระบบปฏิบัติการอื่นเช่นกัน ลองค้นหา "หน่วยความจำเสมือนคอนโซล" จากอุปกรณ์พกพา
wlan0
ฉันจึงมีสถานการณ์ catch-22 ที่พยายามดีบักตำแหน่งที่สคริปต์นี้ล้มเหลว สมมติว่าฉันไม่สามารถใช้ฮับ usb ได้ ... มีวิธีใดบ้างที่ฉันจะใช้งาน chars ลงใน / dev / tty1
/dev/tty1
เป็นรูทได้ แต่ทั้งหมดนี้จะแสดงตัวละครบนหน้าจอไม่ใช่ป้อนพวกเขา
ดูที่:
man 1 script
ตัวอย่างเช่น:
script -f /dev/tty1
screen
ล้มเหลวอย่างน่าสังเวช มันได้ผล.
ใช้tty
คำสั่งในแต่ละเทอร์มินัลเพื่อระบุ:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
สมมติว่า TTY เหล่านี้เพื่อเปลี่ยนเส้นทาง stdout แรกไปเป็นวินาทีให้รันสิ่งนี้ในเทอร์มินัลแรก:
exec 1>/dev/pts/1
หมายเหตุ: ตอนนี้เอาต์พุตคำสั่งทุกรายการจะแสดงบน pts / 1
ในการกู้คืนพฤติกรรมเริ่มต้น stdout ของ pts / 0:
exec 1>/dev/pts/0
ดูวิดีโอนี้สำหรับการสาธิต
สิ่งนี้ใช้ได้กับฉัน:
การใช้แป้นพิมพ์บนคอมพิวเตอร์ "A" (เช่นคอมพิวเตอร์จริงที่ต้องควบคุม) ให้เรียกใช้: screen -q
เชื่อมต่อกับssh
จากคอมพิวเตอร์ "B" กับคอมพิวเตอร์ "A"
ในเซสชัน ssh ให้พิมพ์: screen -ls
เพื่อรับรหัสเซสชันเพื่อเชื่อมต่อกับ (4 หลักในแถวที่มีtty )
เชื่อมต่อกับเซสชันด้านบนด้วย: screen -x <session id>
... โดยใช้หมายเลขรหัสเซสชันที่ได้รับจากscreen -ls
คำสั่งด้านบน
สิ่งใดก็ตามที่พิมพ์ใน "เซสชัน" จะเกิดขึ้นในทั้ง "เซสชัน" ดังนั้นตัวอย่างเช่นการพิมพ์screen -d
จะออกจากทั้งสองเซสชัน
อีกวิธีหนึ่งคือการใช้screen
ยูทิลิตีgnu ในเครื่องท้องถิ่นของคุณ เรียกใช้ด้วย-L
ตัวเลือกหรือเริ่มโดยไม่มีตัวเลือกนั้นและใช้^aH
ลำดับคำสั่ง ทั้งสองวิธีทำให้อินพุตและเอาต์พุตทั้งหมดถูกบันทึกลงในไฟล์ที่ชื่อscreenlog.x
โดยที่ x คือหมายเลขหน้าจอ
สิ่งนี้มีประโยชน์เพราะไม่จำเป็นต้องติดตั้งเพิ่มเติมบนเครื่องระยะไกล
เนื่องจากฉันไม่ได้เริ่ม tty1 ด้วยหน้าจอสคริปต์นี้จึงช่วย:
ฉันใช้คำตอบจาก Baard Kopperud ด้านบน "128" คือ 1 บรรทัดของ tty1 ของฉัน สลีปสามารถตั้งค่าเป็นหมายเลขที่เหมาะสม
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
ฉันใช้สิ่งนี้ในเทอร์มิเนเตอร์และปรับขนาดคอลัมน์เพื่อให้การเลื่อนเป็นข้อความหนึ่งบรรทัด
เปิดสองเทอร์มินัล พิมพ์tty
แต่ละรายการและคุณจะได้รับรหัสเป็น/dev/pts/nº
จากนั้นในครั้งแรกที่คุณพิมพ์script -f /dev/pts/nºofSecondTerminal
และในวินาทีที่คุณทำตรงข้ามscript -f /dev/pts/nºofFirstTerminal
เพื่อให้พวกเขาได้รับการเชื่อมโยง
ยินดีด้วย! เทอร์มินัลทั้งเอาท์พุทและรับสิ่งเดียวกัน ต้องการที่สาม คุณได้ศึกษาชุดค่าผสมแล้วหรือยัง? คุณจะต้องมี 6 script -f
คำสั่ง tty มากยิ่งขึ้น? ต่อไป ...
screen
หรือtmux
ก่อนที่จะเริ่มคำสั่งที่คุณอาจต้องการเข้าถึงจากเทอร์มินัลอื่น .