在CTF环境中,如果要访问服务器中的应用程序,则必须执行SSH。看起来是这样的:
这些步骤开始惹恼我,因为如果我必须多次访问同一应用程序,则必须多次执行这些步骤。
因此,我想创建一个脚本来自动执行此操作,例如'./run_everything',它将自动运行所有内容并立即将我带到应用程序CLI。
什么样的python库可以做到这一点?我并不是要有人帮我,而是要征求建议,例如要使用的库和内容。
答案 0 :(得分:1)
您可以使用expect
。尽管它不是python库,但它是自动化终端命令且易于使用的好工具。我使用它来自动执行ssh
登录并自动执行一些基本命令。它具有称为autoexpect
的功能。这样,它将生成一个简单的脚本,每次修改该命令后,每次都可以执行该脚本,以按顺序运行命令。
您可以在此link上找到如何使用它。
答案 1 :(得分:1)
pexpect
是一个非常不错的python库。您可以使用它来输入和读取终端的输出。
例如,将其用于ssh
并执行ls
:
import pexpect
ssh = 'your server'
child = pexpect.spawn(f'ssh {ssh}', maxread=1)
child.expect(f"{ssh}'s password: ", timeout=120)
child.sendline('password')
child.sendline('ls')
# just printing the output to verify it, but this is not needed
while True:
print(child.readline())
出于您的意图和目的,您只需要做child.sendline('ssh ...')
,child.expect
和child.sendline
第二次从跳转服务器进入您的实际服务器的密码。从那里,您可以发送命令来运行您的应用。
答案 2 :(得分:1)
下面是示例Python SSH Paramiko库示例。
import paramiko
ip='server ip'
port=22
username='username'
password='password'
cmd='some useful command'
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port,username,password)
stdin,stdout,stderr=ssh.exec_command(cmd)
outlines=stdout.readlines()
resp=''.join(outlines)
print(resp)
根据您的最后评论,我的假设属于以下类型:
您可以执行不需要任何输出的命令。它只是执行,您将能够看到它。然后,您可以确保该命令确实有效,并且响应出现问题。如果该命令不起作用,则检查连接性。
如果上述各点均未找到解决方法,则可以稍后参考此页面。这是另一个称为Invoke_Shell的方法。 Implement an interactive shell over ssh in Python using Paramiko?
答案 3 :(得分:0)
尝试使用iTerm2的python api或使用诸如paramiko
之类的某些软件包。