我已经在最新的 ubuntu 20.04 上安装了 qemu/kvm,并且想使用 virt-manager 远程管理客户机。
我可以成功建立连接:virt-manager -c 'qemu+ssh://myqemuuser1@myip:myport/system?keyfile=XX_PATH_TO_PRIV_KEY_XX'
并查看所有来宾,并可以配置它们。但是,当尝试打开来宾(VNC 或 Spice)的显示时,我得到:
SSH tunnel error output: USERNAME@IP: Permission denied (publickey).
当更改 sshd_config 以允许基于密码的身份验证时,一切都再次正常运行(VNC 要求我输入 1 次密码,spice 要求输入约 8 次,但我知道这一点)。
VNC 配置为“仅本地主机”且端口“自动”。
顺便说一句:如果我将其更改为“监听所有接口”,一段时间后我会收到“访客断开连接”的信息(而不是 SSH 隧道错误输出:USERNAME@IP:权限被拒绝(公钥)。)
/var/log/auth.log显示:
sshd[10383]: Connection closed by authenticating user myqemuuser1 XmyipX port XmyportX [preauth]
/var/log/syslog 中没有显示任何错误,并且 /var/log/libvirt/qemu/XXguestXX.log 中的客户机日志中也没有显示任何错误
我找到了一个针对 proxmox 的解决方案,关于仔细检查 authorized_keys 中密钥的格式:
https://forum.proxmox.com/threads/connection-closed-by-ip-port-xxxx-preauth.46734/
因此我仔细检查了文件的格式,它看起来很正常(使用 ssh-keygen -b 4096 -t rsa -f“/home/mylocaluser/.ssh/id_rsa_SERVERNAME”创建的密钥对):
ssh-rsa A....公钥数据...w== myqemuuser1@IP
我还确保任何用户(其他)都可以读取 /home/xxx/.ssh/authorized_keys
我也将其复制到 /root/.ssh/authorized_keys,但出现同样的错误。
看来错误消息“权限被拒绝”是正确的,所以对于 VNC/spice,我可能必须将公钥复制到其他地方,或者创建一个符号链接?我用谷歌没有找到任何东西……
我对 /etc/ssh/sshd_config 的默认更改如下:
Port XcustomX
PermitRootLogin no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
(我也尝试过 virt-viewer,但是也没有用)
我查看了 ~/.cache/virt-manager/virt-manager.log 中的 virt-manager 调试日志:
- 工作(启用密码验证):
[Do, 03 Dez 2020 10:53:27 virt-manager 262723] DEBUG (xmleditor:12) Using GtkSource 4
[Do, 03 Dez 2020 10:53:27 virt-manager 262723] DEBUG (serialcon:17) Using VTE API 2.91
[Do, 03 Dez 2020 10:53:28 virt-manager 262723] DEBUG (vmwindow:177) Showing VM details: <vmmDomain name=XguestnameX id=0x7fcf510bc3c0>
[Do, 03 Dez 2020 10:53:28 virt-manager 262723] DEBUG (engine:391) window counter incremented to 2
[Do, 03 Dez 2020 10:53:28 virt-manager 262723] DEBUG (console:715) Starting connect process for proto=vnc trans=ssh connhost=XqemuIPX connuser=XqemuUserX connport=XsshportX gaddr=127.0.0.1 gport=5900 gtlsport=None gsocket=None
[Do, 03 Dez 2020 10:53:28 virt-manager 262723] DEBUG (sshtunnels:253) Pre-generated ssh command for ginfo: ssh -p XsshportX -l XqemuUserX XqemuIPX sh -c 'nc -q 2>&1 | grep "requires an argument" >/dev/null;if [ $? -eq 0 ] ; then CMD="nc -q 0 127.0.0.1 5900";else CMD="nc 127.0.0.1 5900";fi;eval "$CMD";'
[Do, 03 Dez 2020 10:53:28 virt-manager 262723] DEBUG (sshtunnels:277) Generated tunnel fd=20 for viewer
[Do, 03 Dez 2020 10:53:28 virt-manager 262723] DEBUG (sshtunnels:201) Opened tunnel PID=262803 ERRFD=18
[Do, 03 Dez 2020 10:53:35 virt-manager 262723] DEBUG (console:838) Viewer connected
在谷歌搜索结果中没有找到任何包含这些关键词的内容...我觉得唯一缺少的是一些 VNC/spice 可以访问的服务器端公钥的权限/符号链接?
- 不起作用(仅使用公钥进行身份验证):
[Do, 03 Dez 2020 10:44:12 virt-manager 260859] DEBUG (xmleditor:12) Using GtkSource 4
[Do, 03 Dez 2020 10:44:12 virt-manager 260859] DEBUG (serialcon:17) Using VTE API 2.91
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (vmwindow:177) Showing VM details: <vmmDomain name=XguestnameX id=0x7ffb1a0f71c0>
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (engine:391) window counter incremented to 2
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (console:715) Starting connect process for proto=vnc trans=ssh connhost=XqemuIPX connuser=XqemuUserX connport=XsshportX gaddr=127.0.0.1 gport=5900 gtlsport=None gsocket=None
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (sshtunnels:253) Pre-generated ssh command for ginfo: ssh -p XsshportX -l XqemuUserX XqemuIPX sh -c 'nc -q 2>&1 | grep "requires an argument" >/dev/null;if [ $? -eq 0 ] ; then CMD="nc -q 0 127.0.0.1 5900";else CMD="nc 127.0.0.1 5900";fi;eval "$CMD";'
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (sshtunnels:277) Generated tunnel fd=20 for viewer
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (sshtunnels:201) Opened tunnel PID=260956 ERRFD=18
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (sshtunnels:154) Close tunnel PID=260956 ERRFD=18
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (console:829) Viewer disconnected
[Do, 03 Dez 2020 10:44:14 virt-manager 260859] DEBUG (console:821) SSH tunnel error output: XqemuUserX@XqemuIPX: Permission denied (publickey).
答案1
我今天遇到了这个问题...我使用自定义密钥文件做了同样的事情:
virt-manager -c 'qemu+ssh://user@server:port/system?keyfile=~/.ssh/custom_private_key'
经过调试,我发现这里的问题是连接显示器时未使用自定义密钥文件......
因此我在远程服务器上做了一些更改,并将我的默认公钥 (id_rsa.pub) 复制到 authorized_keys 文件中...然后,现在我可以使用以下命令连接并连接到显示器:
virt-manager -c 'qemu+ssh://user@server:port/system'
答案2
将远程机器信息添加到~/.ssh/config
:
Host remotebox
Hostname a.b.c.d
User someuser
IdentityFile ~/.ssh/custom_key_name
然后连接virt-manager -c 'qemu+ssh://remotebox/system'