ฉันจะแสดงที่อยู่ IP ของ eth0 ที่หน้าจอเข้าสู่ระบบบนเซิร์ฟเวอร์ที่แม่นยำได้อย่างไร


23

เซิร์ฟเวอร์ที่ฉันดูแลจัดการไม่สะดวกพอมีที่อยู่ IP แบบไดนามิกที่กำหนดโดย DHCP แม้ว่าความสมดุลที่สะดวกสบายนั้นเกิดขึ้นเมื่อประมาณสองฟุตจากที่ฉันนั่ง ฉันรู้วิธีแก้ไข / etc / ปัญหาเพื่อแสดงค่าที่แตกต่างกันก่อนที่จะส่งพรอมต์การล็อกอินไปยังจอแสดงผล แต่ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่ / etc / ปัญหาจะแสดงที่อยู่ IP ปัจจุบันของ eth0 (ประเมินอีกครั้ง ตอนบูท) เพื่อที่ฉันจะได้เห็นมันแล้วก็ ssh โดยไม่ต้องเข้าสู่ระบบเพื่อรัน ifconfig


สามารถใช้ conky ในหน้าจอเข้าสู่ระบบได้หรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถทำให้ข้อมูลทุกประเภทมีประโยชน์
dibs

คำตอบ:


27

ในฐานะของ Debian 8 / jessie คุณสามารถใช้\4และ\6อักขระ escape เพื่อแสดงที่อยู่ IPv4 และ IPv6 ดังนั้น/etc/issueไฟล์:

Debian GNU/Linux 8 \n \l

eth0: \4{eth0}

จะส่งออกบางอย่างเช่นต่อไปนี้ที่คอนโซลเข้าสู่ระบบ:

Debian GNU/Linux 8 myserver tty1

eth0: 192.168.1.100
myserver login:

ฉันคิดว่า Ubuntu จะให้ฟังก์ชั่นที่คล้ายกัน (อย่างน้อยในรุ่นใหม่กว่า)


สิ่งนี้ใช้ได้กับฉันใน Ubuntu 16.04 LTS คำตอบที่ระบุว่าถูกต้องไม่ได้อาจเป็นปัญหากับความคิดเห็น grep ไม่ว่าในกรณีใดขอบคุณที่โพสต์ข้อความนี้
Tracker1

มันยังใช้ได้กับ Debian 9 :)
borekon

12

/etc/issueน่าเสียดายที่เป็นข้อความธรรมดา แต่ก็มีตัวเลือกบางอย่างที่คุณสามารถเพิ่มเข้าไปได้ (ดูman agetty) แต่ไม่ใช่ที่อยู่ IP ของ eth0

หากคุณใส่สิ่งนี้ลงใน/etc/rc.local:

IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
echo "eth0 IP: $IP" > /etc/issue

จากนั้นคุณจะเห็นสิ่งนี้:

eth0: 192.168.0.2
myServer login:

3
โปรดทราบสำหรับทุกคนที่ใช้สิ่งนี้สิ่งนี้จะเขียนทับเนื้อหาของ / etc / issue คุณสามารถเพิ่มขั้นตอนเพื่อ grep out บรรทัด "eth *" ก่อนหน้านี้และต่อท้ายพวกเขา
Rebs

1

จากคำตอบของอเล็กซ์และความคิดเห็นของ Rebs นี่คือสิ่งที่ฉันมีสำหรับ/etc/rc.localไฟล์ของฉัน(เฉพาะบรรทัดที่เกี่ยวข้อง):

PRE_MSG="Ubuntu 14.04.3 LTS" # this is from the original /etc/issue

IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')

IP_MSG="Server IP Address:"

printf "%s %s %s\n\n%s %s\n\n" "$PRE_MSG" '\n' '\l' "$IP_MSG" "$IP" > "/etc/issue"

printfคำสั่งไม่มายากล น่าเสียดายที่การ'\n'และ'\l'ภายในสตริงรูปแบบสิ้นสุดลงแทนที่อันแรกด้วยอักขระบรรทัดใหม่และ/etc/issueไฟล์ถูกทำให้ยุ่งเหยิง

เรื่องสั้นสั้นมาก 4 บรรทัดนี้จะเก็บข้อมูลดั้งเดิมที่แสดงโดย/etc/issueไฟล์และเพิ่มServer IP Address:ข้อความ

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

ขอให้โชคดีและการทุบตีอย่างมีความสุข :)


0

ด้วย systemd คุณสามารถทำsystemctl edit getty@สิ่งที่ชอบ:

[Service]
ExecStartPre=-/bin/bash -c '[ ! -f /etc/.issue.orig ] && cp /etc/issue /etc/.issue.orig; int=`ls /sys/class/net|grep enp|head -1`; sed -r "s/\\\\\\n/[\\\\\\4\{$$int\}]/" < /etc/.issue.orig > /etc/issue'

แล้วก็ systemctl daemon-reload && systemctl restart getty@tty1


0

สำหรับ Ubuntu 19.04 ฉันทำตามขั้นตอนเหล่านี้:

ฉันสร้างไฟล์: /etc/network/if-up.d/update-issueโดยมีเนื้อหาดังต่อไปนี้:

#!/bin/sh
PREFIX="Ubuntu 19.04 - dev"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n | head -1 | tr "\n" " ")
echo "$PREFIX\n\nIP: $IPADDRS\n" > /etc/issue

จากนั้นฉันทำเครื่องหมายไฟล์เป็นไฟล์เรียกทำงาน: chmod 0755 /etc/network/if-up.d/update-issue

ใช้งานได้ดี!


0

การสร้างคำตอบของ Nurchi, Alex และ Steve และความคิดเห็นจาก Reb

ต่อไปนี้จะ grep IP เก่าออกและเพิ่มในที่อยู่ในท้องถิ่นใด ๆ (127. ) เซิร์ฟเวอร์ของฉันคือ VM และไม่มี eth0 การทดสอบบน Ubuntu 18.04

สถานที่ใน /etc/network/if-up.d/update-issue

#!/bin/sh
MSG=$(cat /etc/issue | grep -v IP)
IP=$(/sbin/ifconfig | grep 'inet' | grep -v '127' | cut -d: -f2 | awk '{ print $2 }')
printf "%s\n%s\n\n" "$MSG" "IP: $IP" > /etc/issue

แล้วก็ chmod 0755 /etc/network/if-up.d/update-issue

ข้อแตกต่างระหว่างคำตอบของฉันกับสตีฟคือการเพิ่มบรรทัด grep เพื่อลบบรรทัด IP จับข้อความและอ่านพร้อมกับ IP ใหม่ / ที่อัปเดต

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