通过 Python 脚本拒绝所有用户基于密码的 SSH 登录
Posted
技术标签:
【中文标题】通过 Python 脚本拒绝所有用户基于密码的 SSH 登录【英文标题】:Deny password-based SSH login for all users through a Python script 【发布时间】:2021-04-10 16:25:18 【问题描述】:我正在编写一个 Python 脚本来拒绝远程服务器(Ubuntu 18.04)的基于密码的 SSH 登录。我将在我的主机系统 (Windows) 中运行 Python 脚本。因此,我已经使用 paramiko 模块与远程主机建立了 SSH 连接并初始化了 SSH 客户端。
为了拒绝基于密码的 SSH 登录,我应该编辑 /etc/ssh/sshd_config
文件并将“PasswordAuthentication yes”行更改为“PasswordAuthentication no”
请注意,我的远程系统允许无密码sudo
。我只需要在sshd_config
文件中进行这一替换即可。
下面是我尝试过的命令:
ssh_client.exec_command("sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config")
我遇到了错误:couldn't open temporary file .sedVg2nV6: Permission Denied
有没有人遇到过这种情况?
除了sed
,还有其他方法可以替换配置文件的一部分吗? sed
是否仅适用于 .txt
文件?
【问题讨论】:
错误信息意味着sed
需要以root身份运行来创建它的临时输出文件。错误信息只是一个虚假的症状;这里真正的问题是,如果您不是root
,则无法编辑系统文件。 (sed -i
在后台创建一个临时文件,如果成功,则将其移回原始输入文件的顶部。)
Unix 的部分优点在于基本上所有的配置文件都是文本文件。
非常感谢你,我是 Unix 新手,希望我能尽快好起来,感谢这个伟大的社区。span>
【参考方案1】:
我认为你应该改变ssh_client.exec_command("sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config")
tossh_client.exec_command("sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config")
(sed命令将以root权限执行)。
【讨论】:
/g
标志在这里也完全没有意义,它表示要替换所有出现的每一行,但您只希望每行最多出现一次。
谢谢。这是一个菜鸟的错误。
@PraveenMathew 没问题!以上是关于通过 Python 脚本拒绝所有用户基于密码的 SSH 登录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SleekXMPP 或 python 处理 XMPP 订阅我一般
Google Clas-s-room API - 权限被拒绝