mingetty 是 getty 的最小化实现,专门用于虚拟控制台(virtual console)的登录管理。它是Red Hat系Linux发行版(RHEL, CentOS, Fedora)中常用的终端管理工具,设计轻量高效,功能简化,不包含串行终端支持。
mingetty 仅支持虚拟控制台(/dev/tty1, /dev/tty2等),不支持串行终端。如果需要串行终端支持,请使用 agetty 或 mgetty。
# 基本格式
mingetty [选项] 虚拟控制台设备
# 常用格式
mingetty tty1
mingetty --autologin root tty2
mingetty --loginprog=/bin/custom-login tty3
注意:mingetty 不支持指定波特率和终端类型,因为它只用于虚拟控制台。
| 特性 | mingetty |
agetty |
|---|---|---|
| 终端支持 | 仅虚拟控制台(tty1-tty6) | 虚拟控制台和串行终端 |
| 功能完整性 | 最小化功能,轻量级 | 功能完整,可配置性强 |
| 配置选项 | 少量选项,简单易用 | 丰富选项,高度可定制 |
| 发行版默认 | Red Hat系(RHEL, CentOS) | Debian系和其他多数发行版 |
| 资源占用 | 极低(约100KB内存) | 较低(约1-2MB内存) |
| 自动登录 | 支持(--autologin) | 支持(--autologin) |
| issue文件支持 | 不支持 | 支持(/etc/issue) |
| 波特率设置 | 不支持(固定) | 支持(可指定) |
| 安全性 | 基本安全功能 | 更多安全选项 |
| 适用场景 | 服务器、嵌入式系统、容器 | 通用系统、桌面环境 |
在不同系统上使用mingetty:
# 查看系统是否安装了mingetty
which mingetty
# 或
rpm -qf $(which mingetty) # RHEL/CentOS
# 输出示例:mingetty-1.08-59.el9.x86_64
# 查看mingetty版本
mingetty --version
# 输出示例:mingetty 1.08
# 手动启动mingetty在tty1
sudo mingetty tty1
# 按Ctrl+Alt+F1切换到tty1查看效果
# 查看当前运行的mingetty进程
ps aux | grep mingetty
# 输出示例:
# root 1234 0.0 0.0 1234 567 tty1 Ss+ 10:00 0:00 /sbin/mingetty tty1
# 查看虚拟控制台数量
fgconsole
# 输出:1(当前虚拟控制台编号)
# 查看所有tty设备
ls -l /dev/tty[1-6]
# 输出:
# crw--w----. 1 root tty 4, 1 Oct 1 10:00 /dev/tty1
# crw--w----. 1 root tty 4, 2 Oct 1 10:00 /dev/tty2
# ...
# 在RHEL/CentOS中查看系统配置
cat /etc/sysconfig/init
# 查看虚拟控制台相关配置
# ACTIVE_CONSOLES=/dev/tty[1-6]
在systemd系统中配置mingetty:
# 查看系统使用的getty类型
systemctl cat getty@tty1.service
# 如果是mingetty,会显示:
# ExecStart=-/sbin/mingetty --autologin root tty1
# 如果是agetty,会显示:
# ExecStart=-/sbin/agetty --noclear %I $TERM
# 查看所有getty服务状态
systemctl list-units --type=service | grep getty
# 输出示例:
# getty@tty1.service loaded active running Getty on tty1
# getty@tty2.service loaded active running Getty on tty2
# 修改mingetty配置(创建覆盖文件)
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
sudo nano /etc/systemd/system/getty@tty1.service.d/override.conf
# 内容:
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --autologin root --noclear tty1
# 或
ExecStart=-/sbin/mingetty --loginpause tty1
# 重新加载systemd配置
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service
# 禁用特定虚拟控制台
sudo systemctl stop getty@tty6.service
sudo systemctl disable getty@tty6.service
# 或
sudo systemctl mask getty@tty6.service
# 启用虚拟控制台
sudo systemctl enable getty@tty3.service
sudo systemctl start getty@tty3.service
# 查看服务日志
sudo journalctl -u getty@tty1.service
sudo journalctl -u getty@tty1.service -f # 实时查看
sudo journalctl -u getty@tty1.service --since "2023-10-01" --until "2023-10-02"
# 强制重新启动所有mingetty
sudo systemctl restart getty@tty1.service getty@tty2.service getty@tty3.service
# 或
sudo systemctl restart 'getty@tty*'
配置mingetty自动登录:
# 1. 通过命令行配置自动登录
sudo mingetty --autologin root tty1
# 注意:这会跳过用户名提示,直接提示输入密码
# 如果配置了无密码登录,可以直接进入系统
# 2. 通过systemd服务文件配置
# 创建覆盖配置
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
cat << EOF | sudo tee /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --autologin root --noclear tty1
EOF
# 重新加载配置
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service
# 3. 配置无密码自动登录
# 首先设置用户无需密码登录
sudo passwd -d root
# 注意:这有安全风险,生产环境不推荐
# 或使用ssh密钥自动登录
# 创建自动登录脚本
sudo nano /usr/local/bin/autologin.sh
#!/bin/bash
# 自动登录脚本
if [ "$(whoami)" != "root" ]; then
# 如果是root用户,直接启动shell
exec /bin/bash
else
# 否则执行正常登录
exec /bin/login
fi
# 设置权限
sudo chmod +x /usr/local/bin/autologin.sh
# 配置mingetty使用自定义登录程序
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
cat << EOF | sudo tee /etc/systemd/system/getty@tty1.service.d/customlogin.conf
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --loginprog=/usr/local/bin/autologin.sh tty1
EOF
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service
# 4. 配置多个tty的自动登录
for i in {1..3}; do
sudo mkdir -p /etc/systemd/system/getty@tty${i}.service.d/
cat << EOF | sudo tee /etc/systemd/system/getty@tty${i}.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --autologin root --noclear tty${i}
EOF
done
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service getty@tty2.service getty@tty3.service
# 5. 验证自动登录配置
# 切换到tty1 (Ctrl+Alt+F1)
# 应该自动登录root用户,无需输入用户名
# 如果设置了无密码,会直接获得shell
# 否则会提示输入密码
mingetty安全配置和限制:
# 1. 限制root登录特定tty
# 编辑/etc/securetty
sudo nano /etc/securetty
# 只允许root在tty1登录
tty1
# 注释掉其他tty
# tty2
# tty3
# ...
# 2. 配置登录超时
# mingetty本身不支持超时设置
# 可以通过PAM配置
sudo nano /etc/pam.d/login
# 添加:
# auth required pam_faildelay.so delay=3000000
# 3秒延迟
# 3. 限制登录尝试次数
sudo nano /etc/pam.d/login
# 添加:
# auth required pam_tally2.so deny=3 unlock_time=300
# 3次失败后锁定5分钟
# 查看失败登录
sudo pam_tally2 --user root
# 重置计数
sudo pam_tally2 --user root --reset
# 4. 配置登录审计
# 编辑/etc/pam.d/login
sudo nano /etc/pam.d/login
# 添加:
# session required pam_lastlog.so
# 记录最后一次登录信息
# 5. 禁用特定用户登录
# 修改用户shell为/sbin/nologin
sudo usermod -s /sbin/nologin username
# 或
sudo chsh -s /sbin/nologin username
# 查看用户shell
grep username /etc/passwd
# 输出:username:x:1001:1001::/home/username:/sbin/nologin
# 6. 创建自定义nologin消息
sudo nano /etc/nologin.txt
# 内容:
# 抱歉,当前禁止登录。
# 请联系系统管理员。
# 7. 通过/etc/security/access.conf限制
sudo nano /etc/security/access.conf
# 添加:
# -:ALL EXCEPT root admin:ALL
# 只允许root和admin用户登录
# -:baduser:tty1 tty2
# 禁止baduser在tty1和tty2登录
# 8. 配置PAM的limits
sudo nano /etc/security/limits.conf
# 添加:
# * hard maxlogins 3
# 每个用户最多3个并发登录
# 9. 查看当前登录用户
who
w
# 或
last
lastb # 查看失败登录
# 10. 强制注销用户
sudo pkill -KILL -u username
# 或
sudo skill -KILL -u username
mingetty高级配置和自动化脚本:
#!/bin/bash
# 文件名: configure-mingetty.sh
# mingetty自动配置脚本
# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 函数:显示标题
print_header() {
echo -e "${BLUE}"
echo "========================================"
echo " mingetty 配置脚本"
echo "========================================"
echo -e "${NC}"
}
# 函数:检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
echo -e "${RED}错误: $1 命令未找到${NC}"
return 1
fi
return 0
}
# 函数:检查mingetty是否安装
check_mingetty() {
echo -e "${YELLOW}[步骤1] 检查mingetty安装...${NC}"
if ! check_command mingetty; then
echo -e "${RED}mingetty未安装,正在安装...${NC}"
# 检测发行版
if [ -f /etc/redhat-release ]; then
# RHEL/CentOS/Fedora
sudo yum install -y mingetty
elif [ -f /etc/debian_version ]; then
# Debian/Ubuntu
echo -e "${RED}Debian系发行版通常使用agetty而非mingetty${NC}"
read -p "是否尝试安装mingetty? (y/N): " choice
if [[ $choice =~ ^[Yy]$ ]]; then
sudo apt-get update
sudo apt-get install -y mingetty
else
echo -e "${YELLOW}建议使用系统默认的agetty${NC}"
exit 1
fi
else
echo -e "${RED}无法识别的Linux发行版${NC}"
exit 1
fi
else
echo -e "${GREEN}mingetty已安装${NC}"
fi
}
# 函数:配置虚拟控制台数量
configure_vt_count() {
echo -e "\n${YELLOW}[步骤2] 配置虚拟控制台数量...${NC}"
# 当前虚拟控制台数量
CURRENT_VT=$(ls /dev/tty[0-9]* 2>/dev/null | wc -l)
echo -e "当前虚拟控制台数量: ${CURRENT_VT}"
read -p "请输入需要的虚拟控制台数量 (1-12, 默认6): " VT_COUNT
VT_COUNT=${VT_COUNT:-6}
if [[ $VT_COUNT =~ ^[0-9]+$ ]] && [ $VT_COUNT -ge 1 ] && [ $VT_COUNT -le 12 ]; then
# 对于systemd系统
if [ -f /etc/systemd/logind.conf ]; then
sudo cp /etc/systemd/logind.conf /etc/systemd/logind.conf.backup.$(date +%Y%m%d)
# 更新配置
sudo sed -i '/^NAutoVTs=/d' /etc/systemd/logind.conf
echo "NAutoVTs=$VT_COUNT" | sudo tee -a /etc/systemd/logind.conf
sudo systemctl restart systemd-logind
echo -e "${GREEN}已设置虚拟控制台数量为 $VT_COUNT${NC}"
else
echo -e "${YELLOW}非systemd系统,请手动配置/etc/inittab${NC}"
fi
else
echo -e "${RED}无效的数量${NC}"
fi
}
# 函数:配置自动登录
configure_autologin() {
echo -e "\n${YELLOW}[步骤3] 配置自动登录...${NC}"
read -p "是否配置自动登录? (y/N): " choice
if [[ $choice =~ ^[Yy]$ ]]; then
read -p "请输入自动登录用户名: " USERNAME
if id "$USERNAME" &>/dev/null; then
read -p "在哪些tty配置自动登录? (如: 1,2,3 或 all): " TTY_LIST
if [ "$TTY_LIST" = "all" ]; then
TTY_LIST="1 2 3 4 5 6"
fi
for tty in $TTY_LIST; do
if [[ $tty =~ ^[0-9]+$ ]]; then
echo -e "配置 tty${tty} 自动登录用户 $USERNAME..."
# 创建systemd覆盖配置
OVERRIDE_DIR="/etc/systemd/system/getty@tty${tty}.service.d"
sudo mkdir -p $OVERRIDE_DIR
cat << EOF | sudo tee $OVERRIDE_DIR/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --autologin $USERNAME --noclear tty${tty}
EOF
echo -e "${GREEN}tty${tty} 自动登录已配置${NC}"
fi
done
# 重新加载配置
sudo systemctl daemon-reload
echo -e "${GREEN}自动登录配置完成${NC}"
else
echo -e "${RED}用户 $USERNAME 不存在${NC}"
fi
fi
}
# 函数:配置自定义登录程序
configure_custom_login() {
echo -e "\n${YELLOW}[步骤4] 配置自定义登录程序...${NC}"
read -p "是否配置自定义登录程序? (y/N): " choice
if [[ $choice =~ ^[Yy]$ ]]; then
read -p "输入自定义登录程序路径: " LOGIN_PROG
if [ -x "$LOGIN_PROG" ]; then
read -p "在哪些tty使用自定义登录程序? (如: 1,2,3): " TTY_LIST
for tty in $TTY_LIST; do
if [[ $tty =~ ^[0-9]+$ ]]; then
echo -e "配置 tty${tty} 使用自定义登录程序..."
OVERRIDE_DIR="/etc/systemd/system/getty@tty${tty}.service.d"
sudo mkdir -p $OVERRIDE_DIR
cat << EOF | sudo tee $OVERRIDE_DIR/customlogin.conf
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --loginprog=$LOGIN_PROG tty${tty}
EOF
echo -e "${GREEN}tty${tty} 自定义登录程序已配置${NC}"
fi
done
sudo systemctl daemon-reload
else
echo -e "${RED}登录程序 $LOGIN_PROG 不存在或不可执行${NC}"
fi
fi
}
# 函数:重启mingetty服务
restart_mingetty() {
echo -e "\n${YELLOW}[步骤5] 重启mingetty服务...${NC}"
read -p "是否重启所有mingetty服务? (Y/n): " choice
choice=${choice:-Y}
if [[ $choice =~ ^[Yy]$ ]]; then
echo -e "重启mingetty服务..."
sudo systemctl restart 'getty@tty*'
# 检查服务状态
echo -e "\n${YELLOW}mingetty服务状态:${NC}"
systemctl list-units --type=service | grep getty
fi
}
# 主函数
main() {
print_header
# 检查权限
if [ $EUID -ne 0 ]; then
echo -e "${RED}需要root权限运行此脚本${NC}"
echo -e "请使用: sudo $0"
exit 1
fi
# 执行配置步骤
check_mingetty
configure_vt_count
configure_autologin
configure_custom_login
restart_mingetty
echo -e "\n${GREEN}配置完成!${NC}"
echo -e "请切换到虚拟控制台 (Ctrl+Alt+F1) 测试配置"
}
# 运行主函数
main
mingetty故障排查和性能调优:
# 1. 检查mingetty是否运行
ps aux | grep mingetty
# 应该看到类似:
# root 1234 0.0 0.0 1234 567 tty1 Ss+ 10:00 0:00 /sbin/mingetty tty1
# 如果没有运行,启动它
sudo systemctl start getty@tty1.service
# 2. 检查tty设备权限
ls -la /dev/tty1
# 应该显示:
# crw--w----. 1 root tty 4, 1 Oct 1 10:00 /dev/tty1
# 权限:用户root可读写,组tty可写,其他用户无权限
# 如果权限不对,修复:
sudo chown root:tty /dev/tty1
sudo chmod 620 /dev/tty1
# 3. 查看系统日志
sudo journalctl -u getty@tty1.service
sudo journalctl -u getty@tty1.service -f # 实时查看
sudo dmesg | grep tty
# 4. 手动测试mingetty
# 首先停止现有服务
sudo systemctl stop getty@tty1.service
# 手动启动
sudo mingetty tty1
# 切换到tty1查看效果
# 按Ctrl+C停止手动启动的mingetty
# 重启系统服务
sudo systemctl start getty@tty1.service
# 5. 检查登录问题
# 查看/etc/pam.d/login配置
cat /etc/pam.d/login
# 查看/etc/securetty
cat /etc/securetty
# 测试登录
login
# 6. 修复损坏的tty
# 如果tty无响应,尝试:
sudo chvt 2 # 切换到tty2
sudo chvt 1 # 切换回tty1
# 或
sudo systemctl restart getty@tty1.service
# 或重置终端
sudo stty sane < /dev/tty1
sudo reset
# 或发送重置序列
echo -e "\033c" > /dev/tty1
# 7. 性能优化:减少虚拟控制台数量
# 编辑/etc/systemd/logind.conf
sudo nano /etc/systemd/logind.conf
# 修改:
NAutoVTs=3
# 重启服务
sudo systemctl restart systemd-logind
# 禁用不需要的tty
sudo systemctl stop getty@tty4.service getty@tty5.service getty@tty6.service
sudo systemctl disable getty@tty4.service getty@tty5.service getty@tty6.service
# 8. 性能优化:使用更轻量的shell
# 将用户的shell改为dash或bash-static
sudo usermod -s /bin/dash username
# 或在mingetty中指定
sudo mingetty --loginprog=/bin/dash tty1
# 9. 性能优化:禁用不必要的功能
# 创建最小化登录配置
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
cat << EOF | sudo tee /etc/systemd/system/getty@tty1.service.d/minimal.conf
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --noclear --nonewline tty1
EOF
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service
# 10. 内存使用监控
# 查看mingetty内存使用
ps -eo pid,comm,rss,vsz,args | grep mingetty
# 输出示例:
# PID COMMAND RSS VSZ ARGS
# 1234 mingetty 124 456 /sbin/mingetty tty1
# RSS: 物理内存使用 (KB)
# VSZ: 虚拟内存使用 (KB)
# 11. 比较mingetty和agetty内存使用
# mingetty通常使用 100-200KB RSS
# agetty通常使用 1-2MB RSS
# 12. 容器环境中的mingetty
# 在Docker容器中通常不需要mingetty
# 如果需要,可以使用最小化配置
# Dockerfile示例:
# FROM centos:7
# RUN yum install -y mingetty
# RUN echo "/sbin/mingetty tty1" >> /etc/rc.local
# 注意:容器通常只需要一个tty
# 13. 嵌入式系统优化
# 使用BusyBox的getty替代
# BusyBox getty更小,但功能更少
# 安装:yum install busybox
# 使用:busybox getty 38400 tty1
# 14. 监控登录活动
# 查看当前登录用户
who
w
# 查看登录历史
last
lastb
# 查看登录日志
sudo grep "login" /var/log/secure
sudo grep "login" /var/log/auth.log
# 15. 诊断登录延迟
# 如果登录慢,检查:
# - DNS解析
# - NIS/NIS+配置
# - PAM模块
# 禁用DNS解析测试:
sudo mingetty --loginprog="/bin/login -h" tty1
mingetty在systemd系统中的集成:
/usr/lib/systemd/system/getty@.service/etc/systemd/system/getty@tty1.service.d//etc/systemd/logind.confsystemctl, loginctl# 默认mingetty配置示例
ExecStart=-/sbin/mingetty --noclear tty1
传统SysV init系统中的集成:
/etc/inittabinit, telinit/etc/init.d/# /etc/inittab配置示例
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
在Debian/Ubuntu上安装mingetty:
# 1. 从源码编译安装
# 下载源码
wget http://ftp.debian.org/debian/pool/main/m/mingetty/mingetty_1.08.orig.tar.gz
tar -xzvf mingetty_1.08.orig.tar.gz
cd mingetty-1.08
make
sudo make install
# 2. 从RPM包转换(不推荐)
# 下载RPM包
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/mingetty-1.08-5.el7.x86_64.rpm
# 转换为deb
sudo apt-get install alien
sudo alien mingetty-1.08-5.el7.x86_64.rpm
sudo dpkg -i mingetty_1.08-6_amd64.deb
# 3. 使用agetty替代
# Debian/Ubuntu默认使用agetty,功能更全
sudo apt-get install agetty
# 配置agetty替代mingetty
sudo systemctl edit getty@tty1.service
# 替换为:
ExecStart=-/sbin/agetty --noclear %I $TERM
# 4. 使用BusyBox getty
# 更轻量的替代方案
sudo apt-get install busybox
# BusyBox getty语法不同
busybox getty 38400 tty1
# 注意:非Red Hat发行版通常不需要mingetty
# 建议使用系统默认的agetty
如果需要在串行终端上使用getty,有以下几种解决方案:
方案1:使用agetty(推荐)
# 安装agetty
# RHEL/CentOS
sudo yum install agetty
# Debian/Ubuntu
sudo apt-get install agetty
# 配置串行终端
# 创建serial-getty服务
sudo systemctl enable serial-getty@ttyS0.service
# 或手动启动
sudo agetty -L 115200 ttyS0 vt100
方案2:使用mgetty(支持调制解调器)
# 安装mgetty
sudo yum install mgetty
# 配置
sudo nano /etc/mgetty/mgetty.config
# 启动
sudo mgetty ttyS0
方案3:使用传统getty
# 一些系统有传统getty
sudo getty -L ttyS0 115200 vt100
# 或
sudo getty 115200 ttyS0
方案4:通过systemd配置串行终端
# 创建服务文件
sudo nano /etc/systemd/system/serial-getty@.service
# 内容:
[Unit]
Description=Serial Getty on %I
BindTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service
[Service]
ExecStart=-/sbin/agetty -L 115200 %I $TERM
Restart=always
RestartSec=0
[Install]
WantedBy=multi-user.target
# 启用服务
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
迁移步骤:
# RHEL/CentOS
sudo yum install agetty
# 或
sudo dnf install agetty
sudo cp -r /etc/systemd/system/getty@.service.d /etc/systemd/system/getty@.service.d.mingetty.backup
# 创建新的覆盖配置
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
cat << EOF | sudo tee /etc/systemd/system/getty@tty1.service.d/agetty.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noclear %I $TERM
EOF
# mingetty自动登录配置
# ExecStart=-/sbin/mingetty --autologin root --noclear tty1
# 改为agetty配置
cat << EOF | sudo tee /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
EOF
# mingetty不支持issue,agetty支持
# 创建/etc/issue文件
cat << EOF | sudo tee /etc/issue
欢迎使用 MyLinux 系统
主机名: \n
时间: \t
EOF
# 在agetty中启用issue
cat << EOF | sudo tee /etc/systemd/system/getty@tty1.service.d/issue.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --issue-file /etc/issue --noclear %I $TERM
EOF
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service
# 查看进程
ps aux | grep agetty
# 应该看到agetty进程
# 查看日志
sudo journalctl -u getty@tty1.service
在Docker容器中使用mingetty:
# Dockerfile示例
FROM centos:7
# 安装mingetty
RUN yum install -y mingetty
# 创建启动脚本
RUN echo '#!/bin/bash' > /start.sh
RUN echo '# 启动mingetty' >> /start.sh
RUN echo '/sbin/mingetty tty1' >> /start.sh
RUN echo '# 保持容器运行' >> /start.sh
RUN echo 'tail -f /dev/null' >> /start.sh
RUN chmod +x /start.sh
# 设置启动命令
CMD ["/start.sh"]
# 构建和运行
# docker build -t mingetty-container .
# docker run -d --name mingetty-test mingetty-container
# docker exec -it mingetty-test /bin/bash
# 更简单的方案:使用systemd
FROM centos:7
RUN yum install -y systemd mingetty
RUN systemctl enable getty@tty1.service
# 运行systemd
CMD ["/usr/sbin/init"]
# 注意:需要特权模式运行
# docker run -d --privileged --name systemd-container centos-systemd
# 容器中通常不需要mingetty
# 简单替代方案:使用script模拟终端
# Dockerfile
FROM alpine:latest
RUN apk add --no-cache openssh-server
RUN echo 'root:password' | chpasswd
RUN ssh-keygen -A
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
# 或者使用screen/tmux创建虚拟终端
# docker run -it alpine sh
# 在容器内:
# apk add screen
# screen -S mysession
# 这会创建一个虚拟终端会话