Cách thiết lập / etc / vấn đề để hiển thị địa chỉ IP cho eth0


12

Tôi đã có một vài máy ảo linux có giao diện bắc cầu và tôi muốn địa chỉ IP của máy hiển thị sau khi máy khởi động (trong thông tin đăng nhập, nơi nó thường hiển thị bản phát hành và kernel).

Từ những gì tôi có thể nói tin nhắn được chọn từ / etc / vấn đề, nhưng tôi không chắc chắn cách thức và thời điểm viết thư cho nó.


Này Bruno, bạn có thể thay đổi câu trả lời được chấp nhận cho PabloC không? Câu trả lời của anh ấy thực sự tuyệt vời. Tìm tài liệu cho việc này là rất khó và câu trả lời của ông là rất đầy đủ.
Peter Senna

Câu trả lời:


13

Nó chỉ là một tệp văn bản ... bạn viết cho nó giống như cách bạn gửi văn bản đến một tệp với bất kỳ tập lệnh shell nào khác. Một cái gì đó như thế này sẽ thay thế / etc / vấn đề chỉ bằng địa chỉ IP của bạn:

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

Rõ ràng bạn có thể làm cho điều này phức tạp hơn tùy ý, tùy thuộc vào thông tin bạn muốn trong /etc/issuetệp của bạn .

Bạn có thể ghi vào tệp này tương đương với /etc/rc.d/rc.local (thường thực thi sau tất cả các tập lệnh khởi động khác).


5
Hơi nhiều Linux để nóiip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal

Tôi không chắc làm thế nào nhiều linuxy, nhưng vâng, nó cũng hoạt động.
larsks

1
@larks: Nó nhiều linux hơn vì trên linux iplà công cụ bạn phải sử dụng cho loại điều này. ifconfigvề mặt kỹ thuật chỉ để tương thích.
Sorpigal

30

Trên CentOS 7Debian 8 (và có thể khác), chỉ cần nối thêm dòng sau vào/etc/issue

My IP address: \4

và điều đó sẽ giải quyết đến địa chỉ IPv4 của máy. Nếu bạn có nhiều giao diện mạng và bạn muốn chọn một giao diện cụ thể, bạn có thể chỉ định nó với

My IP address: \4{eth0}

Kiểm tra man gettydanh sách các chuỗi thoát được hỗ trợ trên bản phân phối của bạn.


Cũng hoạt động trên CentOS 8 :)
Orsiris de Jong

Điều này hoạt động hoàn hảo trên Centos 7 vm của tôi.
Kevin Mason

6

Tập lệnh này sẽ thêm / xóa địa chỉ IP đến / khỏi /etc/issuetệp nếu cần:

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

Nếu bạn đang sử dụng bản phân phối dựa trên Debian, tốt nhất nên đặt tập lệnh tại các vị trí này:

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

Bằng cách này, các kịch bản được thực thi mỗi khi một giao diện xuất hiện hoặc đi xuống. Đặt nó vào /etc/rc.d/rc.localcó nhược điểm của việc nuôi ong chỉ được thực hiện một lần trong khi khởi động.


3
Đối với bất kỳ ai đang tìm kiếm, trong Red Hat / CentOS / etc kịch bản này sẽ là /sbin/if{up,down}-local. (Nếu nó tồn tại, nó được gọi bởi /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley

@powpow: Tại sao "Địa chỉ IP cục bộ"? --all-ip-addressesđầu ra cũng "công khai" địa chỉ IP. Có thể một cái gì đó như "địa chỉ IP của tất cả các giao diện bên ngoài của máy chủ này:" có ý nghĩa hơn.
ypid

4

bạn có thể viết nó một lần Thật không may, không có chuỗi thoát nhỏ để hiển thị địa chỉ IP của eth0 nhưng có một chuỗi thoát bạn có thể sử dụng trong / etc / vấn đề để hiển thị tên máy chủ: \ n

bạn luôn có thể đặt tĩnh ip của máy trong / etc / vấn đề bằng cách ghi trực tiếp vào tệp. hãy cẩn thận rằng tập tin /etc/su.net được sử dụng để đăng nhập từ xa để bạn cũng có thể muốn chỉnh sửa nó.

dù sao, sau khi làm việc trong cửa sổ terminal, bạn sẽ mất màn hình ban đầu và thông tin địa chỉ ip / host với nó. Cách tốt nhất là đặt tên máy chủ trong lời nhắc (hầu hết các bản phân phối linux) bằng cách sử dụng \ h hoặc \ H hoặc một lần nữa, đặt tĩnh địa chỉ IP bạn biết được đặt trên máy chủ trong biến PS1, bạn có thể đặt biến PS1 trong / etc / hồ sơ trên hầu hết các distro linux.


1
Đây chỉ là để biết IP nào sẽ kết nối với sau khi khởi động vm, vì vậy thiết lập nó như larsks nói là đủ :)
Bruno Lopes

1

Rất cám ơn @larsks đã bắt đầu. Tôi thấy rằng tôi đã gặp rắc rối với việc hoàn thành kịch bản trước khi cần thiết vì vậy tệp vấn đề của tôi luôn trống. Vì vậy, tôi đã thêm một giây tạm dừng và lặp. Tôi không thực sự là một người viết bash, vì vậy nếu có cách nào tốt hơn để làm điều này xin vui lòng cho tôi biết. Tôi đã thêm một COUNTđể đảm bảo nó không lặp lại mãi mãi.

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

Tôi đặt kịch bản này vào /etc/network/if-up.d/.


1

Systemd làm điều này tương đối dễ dàng. systemctl edit getty@với nội dung như:

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

Sau đó systemctl daemon-reload && systemctl restart getty@tty1


0

Đối với bất kỳ ai hạ cánh ở đây sử dụng Ubuntu 19.04, cuối cùng tôi đã chấp nhận từ câu trả lời của @ powpow.

Tôi đã tạo tập tin: /etc/network/if-up.d/update-issuevới các nội dung sau:

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

Sau đó tôi đã đánh dấu các tập tin là thực thi: chmod 0755 /etc/network/if-up.d/update-issue

Hoạt động tuyệt vời!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.