参考: https://www.cnblogs.com/xieshengsen/p/6215168.html
在kernel启动参数中添加: console=ttyS0
这岂不是要重启?
也不用,centos7下,只需要启动一个服务就行:
1 |
systemctl start getty@ttyS0 |
为了下次能自动启动,可以enable一下:
1 |
systemctl enable getty@ttyS0 |
注意: 最好确保 ttyS0已经加入了 /etc/securetty :
1 |
echo ttyS0 >> /etc/securetty |
然后就可以virsh console $domain 了
其实对应domain的console在宿主机是有一个tty的,如下方式查看:
1 |
virsh ttyconsole $domain |
如:
1 2 |
# virsh ttyconsole ceph-8 /dev/pts/2 |
比较有趣的玩法是:
- 在终端1 去 cat /dev/pts/2
- 在终端2 去 echo -e “$username\n$password\necho hello world” >/dev/pts/2
- 在终端1就能看到输出
- 最后别忘了echo “exit” >/dev/pts/2 否则,下次不需要密码就进去了
为什么virsh console没有配置的时候,virt-manager依然能看到虚拟机的界面呢?virt-manager走的是vnc(或spice)方式,而且是宿主机里面提供的,和虚拟机里面是否有vnc(spice)没有关系。
通过ps也能查看:
1 |
ps aux|grep -E "\-(vnc|spice) [^ ]*" |
默认情况下,虚拟机的vnc(或spice)会listen 127.0.0.1 上的端口,远程通过virt-manager访问的时候,如果使用ssh协议的话,会通过如下方式将vnc(或spice)端口重定向到本地:
1 |
ssh libvirtd-host sh -c 'nc -q 2>&1 | grep "requires an argument" >/dev/null;if [ $? -eq 0 ] ; then CMD="nc -q 0 127.0.0.1 5901";else CMD="nc 127.0.0.1 5901";fi;eval "$CMD";' |
然后在这个打开的流上进行vnc(或spice)协议,这个可就不想tty那么好模拟了
那么,kvm如何就能启动一个vnc,使得能够访问虚拟机呢?模拟硬件的tty?