千家信息网

利用python自定义构建交互式SSH应用程序

发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要介绍"利用python自定义构建交互式SSH应用程序",在日常操作中,相信很多人在利用python自定义构建交互式SSH应用程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年01月27日利用python自定义构建交互式SSH应用程序

这篇文章主要介绍"利用python自定义构建交互式SSH应用程序",在日常操作中,相信很多人在利用python自定义构建交互式SSH应用程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"利用python自定义构建交互式SSH应用程序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!


SSH的使用模式分两种方式交互式和非交互式的模式。在自动化系统中,更常用的是非交互式SSH,自动化工具都是基于这种模式,比如ansiable和salt-ssh,还有文件同步工具 rsync的SSH模式。本文我们就来说说交互式SSH应用的构建,并以Python为例实现了一个基本的交互式应用。

自定义 shell

在服务器上,可以使用OpenSSH完成三个步骤来获得 shell:身份验证,shell会话和 命令。我们可以随意配置shell(通过/etc/passwd)。例如,如果将用户的登录shell设置为/usr/bin/cshell,登陆后,就会运行cshell(可以为自定义的交互式程序)。shell定义也非常简单,只需以root权限编辑/etc/passwd修改最后一个字段为自定义的shell程序既可。如果用户通过分配的TTY(默认情况下已完成)连接到服务器,那就将能够运行自定义的应用程序或交互式应用程序。

authorized_keys配置

需要注意的是,如果使用自定义的shell应用程序,无法接受用户传递的额外 命令行参数,例如ssh user@host ls -a执行时会丢掉最后的-a参数。为了解决这个问题,需要通过覆盖运行的命令方式,为了实现覆盖运行命令的操作,我们可以使用用户证书验证文件authorized_keys文件。在该文件每行之前,可以添加适用于使用该密钥登录的用户的选项。这些选项中有一个选项是"command"选项。比如给将/home/user/.ssh/authorized_keys添加一下语句:

command ="/usr/bin/Ccommand" ssh-rsa ... user

用户的shell(可能应该是/bin/sh)就可以自动运行nethack,无论配置何种command,(如果需要,都存储在环境中的SSH_ORIGINAL_COMMAND中)都会先执行。出于安全原因,一般会设置一下限制配置:

restrict,pty,command ="…" ssh-rsa ... user

更详细的设置选项,可以参考sshd官方手册。默认会限制关闭大多数东西,通过pty显式重新启用TTY分配,这样就可以做自定义自己的终端应用(比如Python下curses编写的应用)。我们再来看一个典型的gitlab下典型的多用户限制登陆型的authorized_keys配置实例:

sshd_config配置

另一个可以用来配置启动命令的地方sshd配置文件:/etc/ssh/sshd_config。通过sshd_config的AuthorizedKeysCommand来配置额外执行命令。它设置执行任意程序,并从标准输出stdout获取authorized_keys文件。比如可以配置为:

AuthorizedKeysCommand /usr/bin/Ccommand "%u" "%h" "%t" "%k"AuthorizedKeysUser root

上面配置中的格式字符串的作用是为命令提供尝试登录的用户名(%u),用户的主目录(%h),正在使用的密钥类型(%t,例如ssh-rsa)和用base64编码的公钥(%k)。这里提供的密钥可用于识别用户,可以将用户公钥存储在数据库中,通过应用查询并提供给sshd用于认证。可以在此处嵌入自定义的命令行应用。

Python交互式SSH实例

下面是一个一个简单的的AuthorizedKeysCommand和python实例:

上面 脚本中buildrht-shell命令告诉用户使用ssh builds@buildhost connect 之类的命令进行连接,可以使用SSH_ORIGINAL_COMMAND变量来获取其命令行:

然后是身份验证,检查其密钥和连接:


交互式SSH中最重要的是对的输入命令进行实时的反馈。tail程序就是用来实现这个功能构建和打印日志给标准输出:

以上我们就构建了一个自定义的个性化的交互式SSH应用实例。

到此,关于"利用python自定义构建交互式SSH应用程序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

交互式 应用 命令 用户 程序 配置 应用程序 文件 运行 实例 密钥 模式 学习 登录 限制 验证 公钥 典型 参数 工具 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 Win10服务器版本驱动安装 服务器板卡和显卡区别 普尔网络安全手抄报 延庆区专业软件开发口碑推荐 上海购买网络技术转让价目表 数据库系统易用性兼容性 六年级网络技术教案 通过索引防止重复数据库 sqI语句 访问数据库 长宁区参考软件开发报价表 linux服务器 上传 成都快必助网络技术有限公司 宇星魔指网络技术武汉有限公司 网络工程和网络技术是一回事吗 网络安全设备调查问卷 少女回战服务器互通吗 德州crm软件开发 小学网络安全自查总结博客 江宁区网络安全宣传进学校答案 虹口区口碑好的软件开发有哪些 网络安全工程师成长路径 内蒙全球网络时钟服务器 网络安全内部威胁主要手段包括 云服务器可以下电脑游戏吗 深圳美联网络技术有限公司 网络安全申论结尾 赤壁服务器双线6区 学习软件开发需要具备什么素质 网络安全 推荐书籍 虹口区口碑好的软件开发有哪些
0