1. 目的
虚拟机安装的Arch linux,没装图形界面,配置的dhcp。为了方便通过ssh登录,便想起这个方法,然而并不知道怎么弄,于是搜索了一番,找到下面参考,记录一下免得忘了:
2. 实现
登录信息在/etc/issue 和 /etc/motd 中,此处只需要修改/etc/issue,步骤就是在网络启动之后,用ifconfig或者ip addr取得并提取ip地址,输出到/etc/issue。由于现在的版本已经没有/etc/rc.local,所以要添加一个systemd的服务,这个服务调用脚本去做这个事。
1. 脚本文件/etc/rc.local:#!/bin/bash
ipaddr=$(/usr/bin/ip addr | /usr/bin/sed -ne 's/.*inet \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\/\([0-9]\{1,3\}\) *b.*/\1/p')
logintime=$(date)
echo "Arch Linux \r (\l) ($ipaddr - $logintime)" >/etc/issue
2. service文件
取个名字rc-local.service,文件就放在/etc/systemd/system/下面好了,由于systemd启动的服务是并行的,所以可能ip地址还没分配好,这个脚本就执行完了。只能在起个服务了systemctl enable netctl-wait-online.service
(systemd目录下有netctl-wait-online.service 和 systemd-networkd-wait-online.service)
同时加上Wants= and After= dependency on network-online.target[Unit]
Description=/etc/rc.local Compatibility
Wants=network-online.target
After=network-online.target
Before=getty@tty1.service
[Service]
Type=oneshot
ExecStart=/etc/rc.local
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
3. 效果
4.freebsd
/etc/rc.local#!/bin/sh
ipaddr=$(ifconfig | sed -ne 's/.*inet \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\( .*b.*\)/\1/p')
echo " " > /etc/issue
echo "ip=($ipaddr)" >> /etc/issue