我正在嘗試在不同的 Linux 伺服器發行版(Fedora、Ubuntu、Centos 等)中執行測試。
我知道有一個 init 系統可以允許程式在啟動後執行(無需登入)。問題是我不想為發行版之間的每個不同的初始化系統都有一個特殊情況。有沒有辦法讓root開機後自動登入?
透過這樣做,我可以為任何發行版提供相同的 shell 腳本。或者有辦法解決這個問題嗎?
答案1
我知道有一個 init 系統可以允許程式在啟動後執行(無需登入)。
不幸的是這幾天沒有一init 系統 有六種流行的 init 系統。例如 sysv init、systemd、upstart 等。
無論如何,如果您確實希望系統為您提供具有 root 存取權限的控制台,您可能需要更新您的 init 系統。
我對我的幾個系統上的串行端口執行此操作。我有兩種截然不同的配置,我只使用具有兩個不同版本的 Debian。 我無法想像您能夠想出一種適用於所有發行版的方法。事情的開始方式並不一致。 Systemd 在各個發行版中應該非常相似,但它尚未被廣泛接受。
Debian 與 sysv init (wheezy) 在序列埠上下降到 root
# /etc/inittab
...
# serial port getty spawns sulogin, which drops to a root shell
# on debian if root has a disabled password
T0:23:respawn:/sbin/getty -n -l /sbin/sulogin -L ttyS0 57600 vt102
...
帶有 systemd (jessie) 的 Debian 透過串行埠降至 root
#/etc/systemd/system/getty.target.wants/[email protected]
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Serial Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
BindsTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes
[Service]
ExecStart=-/sbin/agetty -n -l /sbin/sulogin --keep-baud 115200,38400,9600 %I $TERM
Type=idle
Restart=always
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
[Install]
WantedBy=getty.target
您最好的選擇可能是放棄以 root 身分登入的想法,而是使用像 puppet 這樣的設定管理工具,或者可以為您抽像一些各種發行版差異的工具。讓該工具觸發您的測試運行。
答案2
答案3
我對你想要什麼感到困惑,但是如果你想在 Linux 上啟動後以 root 身份運行某些東西,請在大多數發行版上將其貼在這裡:
/etc/rc.local
或者有時
/etc/rc.d/rc.local
答案4
如果是命令列編程,更好的方法是透過 SSH 執行它。此外,您可以使用 SSH 金鑰無需密碼即可登入。