eth0의 IP 주소를 표시하도록 / etc / issues를 설정하는 방법


12

브리지 된 인터페이스가있는 두 개의 Linux 가상 머신이 있으며 머신 부팅 후 (일반적으로 릴리스 및 커널을 표시하는 로그인) 머신의 IP 주소를 표시하고 싶습니다.

내가 말할 수있는 것에서 메시지는 / etc / issues에서 선택되었지만 메시지 작성 방법과시기는 확실하지 않습니다.


Bruno 님, 수락 한 답변을 PabloC로 변경할 수 있습니까? 그의 대답은 정말 훌륭합니다. 이것에 대한 문서를 찾는 것은 매우 어렵고 그의 대답은 매우 완전합니다.
피터 세나

답변:


13

텍스트 파일 일뿐입니다. 다른 셸 스크립트를 사용하여 텍스트를 파일로 보내는 것과 같은 방식으로 파일에 씁니다. 이와 같은 것은 / etc / issue를 당신의 IP 주소로 대체 ​​할 것입니다 :

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

/etc/issue파일 에서 원하는 정보에 따라 임의로 더 복잡하게 만들 수 있습니다.

/etc/rc.d/rc.local에 해당하는 로컬로이 파일에 쓸 수 있습니다 (일반적으로 다른 모든 시작 스크립트 후에 실행 됨).


5
약간 더 Linuxy는 말을ip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal

나는 그것이 얼마나 리눅스인지 잘 모르겠지만 그렇다.
Larsks

1
@larks : 리눅스 ip에는 이런 종류의 도구를 사용해야하기 때문에 더 리눅스 입니다. ifconfig기술적으로 호환성을위한 것입니다.
Sorpigal

33

CentOS는 7데비안 8 (그리고 아마도 다른뿐만 아니라) 단지에 다음 줄을 추가/etc/issue

My IP address: \4

그러면 시스템의 IPv4 주소로 확인됩니다. 여러 네트워크 인터페이스가 있고 특정 네트워크 인터페이스를 하나 선택하려면 다음을 사용하여 지정할 수 있습니다.

My IP address: \4{eth0}

man getty배포에서 지원되는 이스케이프 시퀀스 목록을 확인하십시오 .


CentOS 8에서도 작동 :)
Orsiris de Jong

이것은 Centos 7 vm에서 완벽하게 작동했습니다.
Kevin Mason

6

이 스크립트는 /etc/issue필요에 따라 파일에 IP 주소를 추가하거나 제거 합니다.

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

데비안 기반 배포판을 사용하는 경우 다음 위치에 스크립트를 배치하는 것이 가장 좋습니다.

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

이런 식으로 인터페이스가 올라 오거나 내려갈 때마다 스크립트가 실행됩니다. 그것을 넣으면 /etc/rc.d/rc.local부팅 중에 한 번만 꿀벌이 실행된다는 단점이 있습니다.


3
Red Hat / CentOS / etc에서 검색하는 모든 사람에게이 스크립트는 다음과 같습니다 /sbin/if{up,down}-local. (존재하는 경우에 의해 호출됩니다 /etc/sysconfig/network-scripts/ip{up,down}-post.)
Aaron Copley

@powpow : 왜 "로컬 IP 주소"입니까? --all-ip-addresses"공용"IP 주소도 출력합니다. "이 호스트의 모든 외부 인터페이스의 IP 주소 :"와 같은 것이 더 적합 할 수 있습니다.
ypid

4

한 번만 쓸 수 있습니다. 불행히도 eth0의 IP 주소를 표시하는 getty 이스케이프 시퀀스는 없지만 / etc / issue에서 호스트 이름을 표시하는 데 사용할 수있는 이스케이프 시퀀스가 ​​있습니다 : \ n

당신은 항상 파일에 직접 써서 / etc / issue에서 기계의 IP를 정적으로 설정할 수 있습니다. /etc/issue.net 파일은 원격 로그인에 사용되므로이를 편집 할 수도 있습니다.

어쨌든, 터미널 창에서 작업 한 후 초기 화면과 IP / 호스트 주소 정보를 잃게됩니다. 가장 좋은 방법은 \ h 또는 \ H를 사용하여 프롬프트에서 호스트 이름을 설정하는 것입니다 (대부분의 Linux 배포판은 그렇게합니다). 대부분의 리눅스 배포판에서 프로파일.


1
이 때문에 larsks이 :) 충분히 말합니다로 설정, IP가 VM을 부팅 한 후 연결을 알고 그냥
브루노 로페스

1

시작해 주셔서 감사합니다. @larsks 스크립트가 완성되기 전에 문제가 발생하여 문제 파일이 항상 비어 있음을 알았습니다. 그래서 1 초의 일시 중지를 추가하고 반복했습니다. 나는 실제로 bash 스크립터가 아니므로 더 좋은 방법이 있으면 알려주십시오. 나는 COUNT영원히 반복되지 않도록하기 위해를 추가했습니다 .

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

이 스크립트를에 배치했습니다 /etc/network/if-up.d/.


1

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

우분투 19.04를 사용하는 사람은 @powpow의 답변을 채택했습니다.

/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

잘 작동합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.