SSH OverTheWire的脚本

时间:2019-05-11 03:12:10

标签: python python-3.x

在CTF环境中,如果要访问服务器中的应用程序,则必须执行SSH。看起来是这样的:

  1. (我的终端机) ssh username @ ssh_ip
  2. 输入密码

这些步骤开始惹恼我,因为如果我必须多次访问同一应用程序,则必须多次执行这些步骤。

因此,我想创建一个脚本来自动执行此操作,例如'./run_everything',它将自动运行所有内容并立即将我带到应用程序CLI。

什么样的python库可以做到这一点?我并不是要有人帮我,而是要征求建议,例如要使用的库和内容。

4 个答案:

答案 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.expectchild.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)

根据您的最后评论,我的假设属于以下类型:

  1. 由于脚本未引发任何错误,所以可能发生连接没有问题的情况。但是在STDOUT中,不会存储输出。
  2. 您正在执行的命令未正确执行。

您可以执行不需要任何输出的命令。它只是执行,您将能够看到它。然后,您可以确保该命令确实有效,并且响应出现问题。如果该命令不起作用,则检查连接性。

如果上述各点均未找到解决方法,则可以稍后参考此页面。这是另一个称为Invoke_Shell的方法。 Implement an interactive shell over ssh in Python using Paramiko?

答案 3 :(得分:0)

尝试使用iTerm2的python api或使用诸如paramiko之类的某些软件包。