
qemu-system-x86_64
로 시작-nic user,ipv6=off,hostfwd=tcp::9022-:22
호스트에 lo
인터페이스( 관련 인터페이스)만 있으면 vm이 시작되지만 포트 22를 할당하려는 데몬은 중단됩니다. 127.0.0.1
예를 들어 VM 내부: #systemctl start sshd
종료될 때까지 정지되며 흥미로운 내용은 로그에 표시되지 않습니다.
qemu를 시작하기 전에 호스트에 다른 인터페이스가 있으면 vm도 시작되지만 포트 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 systemd를 사용하여 정상적으로 작동합니다! 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의 시계를 해제하려고 시도한 것이었습니다. 운이 좋지 않습니다)
또한 이는 사용자 네트워크가 있는 VM 내부에 있으므로 VM 관점에서 볼 때 항상 유효한 네트워크를 갖습니다.
$ 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가 단지 !(*@&#!@ ntp를 영원히 기다리고 있다는 것입니다!
온라인에 접속하자마자:
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