Cara mengatur / etc / issues untuk menunjukkan alamat IP untuk eth0

12

Saya punya beberapa mesin virtual linux dengan antarmuka yang terhubung, dan saya ingin alamat IP dari mesin tersebut muncul setelah mesin dinyalakan (dalam login, di mana biasanya ditampilkan rilis dan kernel).

Dari apa yang saya tahu pesannya diambil dari / etc / issues, tapi saya tidak yakin bagaimana dan kapan harus menulisnya.

Bruno Lopes
sumber
Hei Bruno, bisakah Anda mengubah jawaban yang diterima untuk PabloC? Jawabannya sangat bagus. Menemukan dokumentasi untuk ini sangat sulit dan jawabannya sangat lengkap.
Peter Senna

Jawaban:

13

Ini hanya file teks ... Anda menulis ke sana dengan cara yang sama Anda akan mengirim teks ke file dengan skrip shell lainnya. Sesuatu seperti ini akan menggantikan / etc / masalah hanya dengan alamat ip Anda:

ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue

Jelas Anda dapat menjadikan ini sewenang-wenang lebih kompleks, tergantung pada informasi apa yang Anda inginkan dalam /etc/issuefile Anda .

Anda dapat menulis ke file ini dalam ekuivalen lokal Anda dari /etc/rc.d/rc.local (yang biasanya dijalankan setelah semua skrip startup lainnya).

larsks
sumber
5
Sedikit lebih banyak Linuxy untuk dikatakanip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal
Saya tidak yakin bagaimana itu lebih linuxy, tapi ya, itu berfungsi juga.
larsks
1
@larks: Ini lebih linuxy karena di linux ipadalah alat yang seharusnya Anda gunakan untuk hal semacam ini. ifconfigsecara teknis hanya untuk kompatibilitas.
Sorpigal
31

Pada CentOS 7 dan Debian 8 (dan mungkin juga yang lain), tambahkan saja baris berikut ke/etc/issue

My IP address: \4

dan itu akan mengatasi ke alamat IPv4 mesin. Jika Anda memiliki beberapa antarmuka jaringan dan Anda ingin memilih satu yang spesifik, Anda dapat menentukannya dengan

My IP address: \4{eth0}

Periksa man gettydaftar urutan pelarian yang didukung pada distribusi Anda.

PaoloC
sumber
Juga bekerja pada CentOS 8 :)
Orsiris de Jong
Ini bekerja dengan baik pada Centos 7 vm saya.
Kevin Mason
6

Skrip ini akan menambah / menghapus alamat IP ke / dari /etc/issuefile sesuai kebutuhan:

#!/bin/sh
PREFIX="Local IP addresses:"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tr "\n" " ")

perl -i -p -0777 -e "s/^$PREFIX[^\n]*\n\n//m; s/$/\n$PREFIX $IPADDRS\n/ if length('$IPADDRS')>6" /etc/issue

Jika Anda menggunakan distro berbasis Debian, yang terbaik adalah menempatkan skrip di lokasi berikut:

/etc/network/if-up.d/update-issue
/etc/network/if-post-down.d/update-issue

Dengan cara ini skrip dieksekusi setiap kali sebuah antarmuka muncul atau turun. Meletakkannya di dalam /etc/rc.d/rc.localmemiliki kelemahan karena dijalankan hanya satu kali selama bootup.

powpow
sumber
3
Bagi siapa pun yang mencari, di Red Hat / CentOS / etc script ini akan /sbin/if{up,down}-local. (Jika ada, itu disebut oleh /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley
@powpow: Mengapa "Alamat IP lokal"? --all-ip-addressesoutput juga alamat IP "publik". Mungkin sesuatu seperti "alamat IP semua antarmuka eksternal dari host ini:" lebih masuk akal.
ypid
4

Anda bisa menulisnya sekali. sayangnya tidak ada urutan getty untuk menampilkan alamat ip eth0 tetapi ada urutan escape yang dapat Anda gunakan di / etc / issue untuk menunjukkan nama host: \ n

Anda selalu dapat secara statis mengatur ip mesin di / etc / issue dengan menuliskannya langsung ke file. berhati-hatilah karena file /etc/issue.net digunakan untuk login jarak jauh sehingga Anda mungkin ingin mengeditnya juga.

Lagi pula, setelah bekerja di jendela terminal Anda akan kehilangan layar awal dan informasi alamat ip / host dengan itu. Cara terbaik adalah dengan mengatur nama host di prompt (kebanyakan distro linux lakukan) menggunakan \ h atau \ H atau lagi, secara statis mengatur alamat ip yang Anda tahu diatur pada host dalam variabel PS1 Anda dapat mengatur variabel PS1 di / etc / profil pada kebanyakan distro linux.

pengguna237419
sumber
1
Ini hanya untuk mengetahui IP apa yang harus disambungkan setelah mem-boot vm, jadi pengaturannya seperti yang dikatakan larsks sudah cukup :)
Bruno Lopes
1

Banyak terima kasih kepada @ larsks untuk memulai. Saya menemukan bahwa saya memiliki masalah dengan skrip yang diselesaikan sebelum diperlukan sehingga file masalah saya selalu kosong. Jadi saya menambahkan jeda 1 detik dan berputar. Saya bukan penulis bash, jadi jika ada cara yang lebih baik untuk melakukannya, beri tahu saya. Saya menambahkan COUNTuntuk memastikan itu tidak berulang selamanya.

#!/bin/sh

COUNT=1

while [ $COUNT -lt 10 ]
do
  echo $COUNT

  COUNT=$((COUNT + 1))
  IP=`ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: `
  if [ -n "$IP" ]; then
    break
  fi 
  sleep 1
done


echo "IP: " $IP | cat > /etc/issue

Saya menempatkan skrip ini di /etc/network/if-up.d/.

nomadic_squirrel
sumber
1

Systemd membuat ini relatif mudah. systemctl edit getty@dengan konten seperti:

[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'

Kemudian systemctl daemon-reload && systemctl restart getty@tty1

h0tw1r3
sumber
0

Bagi siapa pun yang mendarat di sini yang menggunakan Ubuntu 19.04, saya akhirnya mengadopsi dari jawaban @ powpow.

Saya membuat file: /etc/network/if-up.d/update-issuedengan konten berikut:

#!/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

Saya kemudian menandai file sebagai executable: chmod 0755 /etc/network/if-up.d/update-issue

Bagus sekali!

Steve McDonald
sumber