当前位置: 首页 > 科技观察

自定义构建交互式SSH应用程序,以Python为例

时间:2023-03-21 19:21:44 科技观察

自定义和构建交互式SSH应用程序。以Python为例。在自动化系统中,比较常用的是非交互式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应用程序,你不能接受用户传递的额外的命令行参数。例如执行sshuser@hostls-a时,最后的-a参数会丢失。为了解决这个问题,我们需要覆盖运行命令。为了实现覆盖运行命令的操作,我们可以使用用户证书来验证authorized_keys文件。在此文件的每一行之前,您可以添加适用于使用此密钥登录的用户的选项。这些选项之一是“命令”选项。比如在/home/user/.ssh/authorized_keys中添加语句:command="/usr/bin/Ccommand"ssh-rsa...用户的shell(应该是/bin/sh)可以自动运行nethack,没有无论配置什么命令(如果需要,它存储在环境中的SSH_ORIGINAL_COMMAND中)都会首先执行。为了安全起见,一般会设置一些限制配置:restrict,pty,command="..."ssh-rsa...user更详细的设置选项请参考sshd官方手册。默认情况下,大多数东西都是被限制和关闭的,通过pty显式地重新启用TTY分配,这样你就可以自定义你自己的终端应用程序(比如Python下用curses写的应用程序)。下面看一个典型的gitlab下多用户限制登录类型的authorized_keys配置示例:通过sshd_config的AuthorizedKeysCommand配置额外的执行命令。它设置任意程序的执行并从标准输出中获取authorized_keys文件。例如可以配置为:AuthorizedKeysCommand/usr/bin/Ccommand"%u""%h""%t""%k"AuthorizedKeysUserroot上述配置中格式字符串的作用是为命令提供用户名(%u)、用户的主目录(%h)、正在使用的密钥类型(%t,例如ssh-rsa)和base64编码的公钥(%k)。这里提供的密钥可以用来识别用户,用户公钥可以存储在数据库中,由应用程序查询并提供给sshd进行身份验证。可以在此处嵌入自定义命令行应用程序。Python交互SSH例子下面是一个简单的AuthorizedKeysCommand和python例子:上面脚本中的buildrht-shell命令告诉用户使用sshbuilds@buildhostconnect等命令进行连接,可以通过SSH_ORIGINAL_COMMAND变量获取其命令line:then就是认证,检查它的key和connection:交互式SSH最重要的是输入命令的实时反馈。tail程序就是用来实现这个功能,构建并打印日志到标准输出:上面我们构建了一个自定义的个性化交互SSH应用实例。小结在本文中,我们介绍了自定义构建交互式SSH应用程序的方法,并以Python为例实现了一个简单的例子。抛砖引玉,一个自定义的交互式SSH应用程序在很多情况下可以作为一个非常有用的工具,比如你能不能对github的gitssh做一个扩展,在过去增加一些功能,而不是简单的消息提示:希布尔温暖!您已成功通过身份验证,但GitHub不提供shellaccess