
qemu-system-x86_64
從...開始-nic user,ipv6=off,hostfwd=tcp::9022-:22
當主機上僅存在lo
介面(與其關聯)時,虛擬機器將啟動,但任何嘗試指派連接埠 22 的守護程式都會掛起。127.0.0.1
例如,在 vm 內部:#systemctl start sshd
將掛起直到被殺死,並且日誌中不會顯示任何有趣的內容。
如果在啟動 qemu 之前主機上有任何其他接口,那麼虛擬機也會啟動,但可以很好地分配端口 22。並ss
會顯示:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 1 0.0.0.0:9022 0.0.0.0:* users:(("qemu-system-x86",pid=9035,fd=12))
是什麼導致了這個問題? qemu 主機程序不會嘗試將其與依賴於缺失介面的任何 IP 關聯起來。
我沒有使用kvm。這是完整的命令:
qemu-system-x86_64 -machine pc,vmport=off,mem-merge=off,dump-guest-core=off,kernel-irqchip=split -smp 4 -m 1G,slots=4,maxmem=8G -name vm -monitor tcp:127.0.0.1:9023,server,nowait -msg timestamp=on,guest-name=on -rtc base=utc,clock=host,driftfix=none -pidfile .vm_started -daemonize -no-reboot -D .vm.log -nic user,id=n1,ipv6=off,hostname=vm,hostfwd=tcp::9022-:22,hostfwd=tcp::8000-:8000 -boot c -drive file=linux-x86.qcow2,index=0,media=disk,snapshot=off,format=qcow2;
編輯:更多關注 systemd
我認為這完全是系統問題。 ....嘆。
手動啟動 sshd,使用與 systemd 應該使用的完全相同的 exec,工作得很好! sshd 預設監聽 0.0.0.0,
另外,這都是使用標準分發文件。沒什麼客製的。
$ cat /lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH Daemon
#Wants=sshdgenkeys.service
#After=sshdgenkeys.service
#After=network.target
[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
(評論的內容是嘗試解鎖 systemd,但沒有運氣)
另外,這是在具有用戶網路的虛擬機器內部,因此從虛擬機器的角度來看它始終具有有效的網路:
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3
inet 10.0.2.15/24 metric 1024 brd 10.0.2.255 scope global dynamic eth0
valid_lft 84976sec preferred_lft 84976sec
inet6 fe80::5054:ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
當然,解決方案是 systemd 只是!
我一上網:
Apr 23 15:58:16 archlinux systemd[1]: Reached target System Time Synchronized.
Apr 23 15:58:16 archlinux systemd[1]: Started Refresh existing PGP keys of archlinux-keyring regularly.
Apr 23 15:58:16 archlinux systemd[1]: Started Daily verification of password and group files.
Apr 23 15:58:16 archlinux systemd[1]: Reached target Timer Units.
Apr 23 15:58:16 archlinux systemd[1]: Initializes Pacman keyring was skipped because of an unmet condition check (ConditionFirstBoot=yes).
Apr 23 15:58:16 archlinux systemd[1]: Started OpenSSH Daemon.
好的!如果 ntp 主機無法存取或其他什麼情況,對某些東西的可見度為零,這將永遠影響我......仍然不確定是什麼與這些東西聯繫在一起。
$ systemctl show sshd
...
After=sysinit.target systemd-journald.socket pacman-init.service basic.target system.slice
……我猜這是因為有人附加了 pacman-init.service 到它?即使它會被跳過,因為它只在第一次啟動時運行以簽署密鑰?甚至systemctl list-dependencies sshd
會顯示所有內容全部綠色或跳過。沒有警告。多麼恥辱的經驗。
答案1
問題是 systemd 給我帶來了麻煩。它沒有執行任何操作,因為它正在等待依賴項,但它沒有在任何日誌中顯示這一點。它也沒有表明它正在等待的依賴是對我的服務的依賴。
搬去https://unix.stackexchange.com/questions/743795/how-to-get-visibility-on-systemd-unit-lifecycle