ทุบตีให้เปลี่ยนสีเมื่อฉันเข้าสู่เซิร์ฟเวอร์


15

มีวิธีทำให้ bash prompt dynamic หรือไม่ดังนั้นมันจะเปลี่ยนสีเมื่อล็อกอินเข้าสู่เซิร์ฟเวอร์หรือไม่?

ดังนั้นฉันต้องการสีที่เป็นสีเขียวเมื่ออยู่ในระบบของฉันและเปลี่ยนเป็นสีแดงเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ ฉันมีเซิร์ฟเวอร์จำนวนมากฉันไม่ต้องการให้เซิร์ฟเวอร์.bashrcเหล่านั้นแตกต่างกัน


อาจจะไม่. แต่กลับไปที่superuser.com/questions/33712/…
สุ่ม

1
ทำไมไม่ทำให้เทอร์มินัลของคุณเป็นสีแดง (หรือสีอื่น ๆ ) เพื่อที่ว่าเมื่อคุณเชื่อมต่อกับพวกเขาคุณจะได้รับสีขาวเริ่มต้น?
Reinstate Monica - ζ--

คำตอบ:


9

~/.bashrcพรอมต์ระยะไกลถูกกำหนดโดยระยะไกล ดังนั้นคุณยังต้องคัดลอกไปยังเซิร์ฟเวอร์ระยะไกล อย่างไรก็ตามคุณสามารถใช้ซิงเกิ้ล~/.bashrcสำหรับโฮสต์ทั้งหมดและตั้งค่าสีพรอมต์ตามชื่อโฮสต์:

[ "$PS1" ] || return 0                           # continue only when interactive
case $(hostname -s) in
laptop*)
    prompt_color='\033[48;5;16m\033[38;5;46m'    # green(46) on black(16)
    ;;
server*)
    prompt_color='\033[48;5;16m\033[38;5;196m'   # red(196) on black(16)
    ;;
esac
ORIG_PS1=$PS1                                    # in case needed
PS1='<\['${prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset prompt_color

หมายเหตุ:

  • อย่าตั้งค่าPS1หากยังไม่ได้ตั้งค่า (เช่นถ้าเชลล์ไม่ได้ทำงานอยู่) การทดสอบว่าPS1ไม่ว่างเปล่านั้นเป็นวิธีทั่วไปในการตัดสินใจว่าเชลล์เป็นแบบโต้ตอบหรือไม่และคุณไม่ต้องการสร้างความสับสนให้กับโปรแกรมที่ทำเช่นนั้น (การทดสอบที่ถูกต้องมากขึ้นคือการตรวจสอบว่า$-มีi)

  • หากคุณต้องการให้รหัสนี้ทำงานเมื่อลงชื่อเข้าใช้เซิร์ฟเวอร์ระยะไกลคุณควรมีแหล่งข้อมูลแฟ้มแหล่ง~/.bashrcใดแหล่งหนึ่งเสมอ แต่ฉันคิดว่าคุณรู้

  • ในรหัสหลบหนีต้องอยู่ในPS1\[...\]

  • \[033[mรีเซ็ตพื้นหน้าและพื้นหลังเป็นค่าเริ่มต้น ดังนั้นที่นี่:\wจะปรากฏในพื้นหน้า / พื้นหลังของเทอร์มินัล

  • \[033[48;5;XXXm\033[38;5;YYYmชุดพื้นหลัง / เบื้องหน้าไป/XXXYYY

  • colortestสำหรับสคริปต์ที่ทิ้งสีที่มีอยู่ให้ลอง

  • หากต้องการตรวจสอบลักษณะที่ปรากฏของพรอมต์:

    echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "

7

หากคุณไม่ต้องการ (ไม่สามารถ) ทำให้การควบคุมระยะไกลแยกจากกันPS1ฉันจะพูดว่า "ไม่" อย่างน้อยก็ยากมาก พิจารณาว่าในการเชื่อมต่อ SSH ฝั่งท้องถิ่นไม่มีความคิดที่แท้จริงว่า shell prompt คืออะไรและมีอะไรอย่างอื่นและการตั้งค่าสีสำหรับ prompt นั้นมาจากรีโมต คุณสามารถตั้งค่าสีก่อนที่จะเริ่มเซสชัน แต่มันจะมีผลกับเอาต์พุตทั้งหมดนั่นคือจนกว่าlsตัวแก้ไขหรือตัวแก้ไขจะกำหนดสีของมันเอง

แน่นอนว่าคุณสามารถใช้ wrapper สำหรับเซสชั่นเพื่อตรวจจับทุกสิ่งที่ดูเหมือนว่าเป็นพรอมต์และทำให้เป็นสี แต่มันจะนำไปสู่การบวกปลอมได้ง่าย (สีในทุกบรรทัดด้วย$?) และซับซ้อนมากเมื่อเทียบกับการทิ้ง บรรทัดเดียวกับของคุณ.profileหรือ.bashrcในแต่ละเครื่อง

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


2
ย่อหน้าสุดท้ายนั้นเป็นกุญแจสำคัญ ถ้า OP ดูแลระบบ "เซิร์ฟเวอร์จำนวนมาก" มันน่าประหลาดใจที่แต่ละเครื่องต้องได้รับการกำหนดค่าแยกกันตั้งแต่แรก
การแข่งขัน Lightness กับโมนิก้า

5

ฉันกำลังใช้สคริปต์ตัวตัดคำกับ sshpass ที่จะอัปโหลดโปรไฟล์ชั่วคราวก่อนแล้วจึงใช้โปรไฟล์นี้ ssh (และลบไฟล์ temp)

สองสิ่งหลักของสคริปต์คือ:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"

การใช้สิ่งนี้คุณสามารถกำหนดสีของเซสชันระยะไกลได้อย่างง่ายดาย

ฉันรู้ว่านี่ไม่ได้ตอบคำถามของคุณโดยตรง แต่สามารถใช้แก้ปัญหาได้


3
อย่าใช้sshpass -pถ้าเป็นไปได้! อาร์กิวเมนต์บรรทัดคำสั่งสำหรับโปรแกรมที่กำลังทำงานมักจะปรากฏแก่ผู้ใช้ทั้งหมดในpsและจะเป็นรหัสผ่าน แม้ว่าคุณจะไม่มีบัญชีผู้ใช้อื่น ๆ ในเครื่องคุณอาจพิมพ์บนหน้าจอโดยไม่ตั้งใจ sshpassสามารถอ่านรหัสผ่านจากตัวแปรสภาพแวดล้อมซึ่งไม่ใช้งานยากเกินไป นอกจากนี้ให้พิจารณาคีย์ ssh หากคุณจะบันทึกข้อมูลรับรองการเข้าสู่ระบบไปยังไฟล์
ilkkachu

คุณพูดถูกและฉันไม่ได้พยายามโปรโมตการใช้งาน ฉันเพิ่งวางตัวอย่างจากสคริปต์ของฉันซึ่งใช้เพื่อการพัฒนาเท่านั้นและไม่มีความเสี่ยงด้านความปลอดภัย ตัวแปร SSHPASS จะถูกปล่อยว่างเปล่าสำหรับระบบการผลิตที่ใช้ปุ่ม ssh ฉันจะอัปเดต
Mikael Kjær

1

คุณอาจสนใจcontext-colorซึ่งฉันได้รวบรวมไว้เพื่อจุดประสงค์ที่แน่นอน: https://github.com/ramnes/context-color

มันเป็นสคริปต์ง่ายๆที่เมื่อเรียกใช้งานเอาต์พุตจะสร้างสีตามแฮชของเอาต์พุตคำสั่ง ด้วยการติดตั้งที่ใดที่หนึ่งในของ$PATHคุณคุณสามารถทำสิ่งนี้ในของคุณ.bashrc:

export PS1="$(context-color -p)$PS1\[\e[0m\]"

(ที่--prompt/-pเป็นสวิตช์เพื่อให้สีถูกหลบหนีสำหรับพร้อมท์และ\[\e[0m\]ลำดับ escape เพื่อรีเซ็ตสี)

whoami; hostnameโดยค่าเริ่มต้นคำสั่งที่ใช้ในการสร้างกัญชาคือ หากคุณต้องการให้สีเปลี่ยนตามชื่อโฮสต์คุณสามารถเปลี่ยน$CONTEXTสภาพแวดล้อมของตัวแปร ( export CONTEXT="hostname") หรือเพียงแค่ใช้--context/-cตัวเลือก ( context-color -c "hostname")

ดูตัวอย่างด้านล่าง:

การสาธิต

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