今天一如既往打开我的xshell,准备连接Vmware上的虚拟机(Vmware的终端实在是太难用了,所以我都是用xshell连接使用),却发现连接不上了。
尝试重启了虚拟机,重启了xshell,发现都没用。
突然想起来也许是之前用了一个命令sudo chmod -R 777 /etc,因为我要往这个文件夹下写入一些东西,就直接全部改成777权限了。
于是我又尝试使用sudo命令改回来,sudo chmod -R 440 /etc,却得到了如下报错:
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found,quitting
sudo: unable to initialize policy plugin
尝试去掉sudo,直接chmod -R 440 /etc,却提示操作不被允许。
查了很多篇博客,说可以执行如下命令
pkexec chmod 440 /etc/sudoers
来改回权限,但我这里继续得到了报错,提示没有授权。
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===Error executing command as another user: Not authorized
最终解决方案:
1.使用ctrl+alt+F2 创建第二个终端窗口;这时我们可以使用ctrl+alt+F1切换到窗口1;ctrl+alt+F2切换到窗口2。
2.两个窗口都使用root用户登录。
3.在窗口1输入命令echo $$,获取到pid
4.切换到窗口2,输入pkttyagent --process pid(窗口1中获取到的pid),这时窗口2会卡住。
5.切换回窗口1,输入pkexec chmod 440 /etc/sudoers,此时窗口1会卡住
6.返回窗口2输入root的密码,再返回窗口1,发现pkexec命令执行成功。
7.在窗口1输入命令pkexec chmod 600 /etc/ssh/*key,窗口1卡住,回到窗口2输入密码。
8.回到窗口1,输入命令service sshd restart后,再查看sshd状态systemctl status ssh.service,如下图所示就成功了。
一通操作下来xshell可以连上了,sudo命令也可以使用了,起飞!