Python SSH OverTheWire的脚本

Python SSH OverTheWire的脚本,python,python-3.x,Python,Python 3.x,在我的CTF环境中,如果我想访问服务器中的应用程序,我必须执行SSH。下面是它的样子: 我的终端sshusername@ssh_ip 输入密码 这些步骤开始让我恼火,因为如果我必须多次访问同一个应用程序,我必须多次执行这些步骤 因此,我想创建一个自动执行此操作的脚本,如“/run\u everything”,它将自动运行所有内容并立即将我带到应用程序CLI 什么样的python库可以做到这一点?我不是在要求别人为我制作,而是更像是在征求关于使用什么库之类的建议。试试iTerm2的python a

在我的CTF环境中,如果我想访问服务器中的应用程序,我必须执行SSH。下面是它的样子:

我的终端sshusername@ssh_ip 输入密码 这些步骤开始让我恼火,因为如果我必须多次访问同一个应用程序,我必须多次执行这些步骤

因此,我想创建一个自动执行此操作的脚本,如“/run\u everything”,它将自动运行所有内容并立即将我带到应用程序CLI


什么样的python库可以做到这一点?我不是在要求别人为我制作,而是更像是在征求关于使用什么库之类的建议。

试试iTerm2的python api或使用一些类似paramiko的包。

试试iTerm2的python api或使用一些类似paramiko的包。

你可以使用expect。虽然它不是一个python库,但它是一个自动化终端命令的好工具,并且易于使用。我用它来自动化ssh登录和一些基本命令。它有一个名为autoexpect的功能。这样,它将生成一个简单的脚本,每次都可以按顺序运行命令,只需进行简单的修改

您可以找到如何使用它。

您可以使用expect。虽然它不是一个python库,但它是一个自动化终端命令的好工具,并且易于使用。我用它来自动化ssh登录和一些基本命令。它有一个名为autoexpect的功能。这样,它将生成一个简单的脚本,每次都可以按顺序运行命令,只需进行简单的修改

您可以在上面找到如何使用它。

pexpect是一个非常好的python库。您可以使用它输入和读取终端的输出

例如,使用它来ssh和执行ls:

出于您的意图和目的,您只需要执行以下操作:child.sendline'ssh…,child.expect和child.sendline第二次输入密码,以便从跳转服务器进入实际服务器。从那里你可以发送命令来运行你的应用程序。

pexpect是一个很好的python库。您可以使用它输入和读取终端的输出

例如,使用它来ssh和执行ls:


出于您的意图和目的,您只需要执行以下操作:child.sendline'ssh…,child.expect和child.sendline第二次输入密码,以便从跳转服务器进入实际服务器。从那里您可以发送命令来运行应用程序。

下面是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的方法。
下面是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的方法。

您可以跳过1,2。四,。使用正确的SSH设置:私钥身份验证和jumphost。3.五,。你可以跳过1,2。四,。使用正确的SSH设置:私钥身份验证和jumphost。3.五,。那是一条直线。嘿,我现在正在用帕拉米科。我有一个无法连接的问题。在我的终端上没有任何错误,只是什么也没做。嘿,我现在正在使用paramiko。我有一个无法连接的问题。我的终端没有任何错误,只是什么都没做。嘿,谢谢你的建议!快速提问,我可以这样做吗child=pexpect.spawn'ssh my_username@'+jumphostname+'-p50000',例如jumphostname是10.10.10.10?我正在尝试这个,我的终端一直把我带回本地终端。@ThomasWest如果该命令在您的终端中有效,它在pexpect中也应该有效,我对库不太熟悉,但您可以测试它。如果您键入的命令与我的完全相同
在没有pexpect的情况下进入你的终端会发生什么?它可以工作,但由于某种原因,当我将它放入pexpect时它不工作。嘿,谢谢你的建议!快速提问,我可以这样做吗child=pexpect.spawn'ssh my_username@'+jumphostname+'-p50000',例如jumphostname是10.10.10.10?我正在尝试这个,我的终端一直把我带回本地终端。@ThomasWest如果该命令在您的终端中有效,它在pexpect中也应该有效,我对库不太熟悉,但您可以测试它。如果在没有pexpect的情况下在终端中键入确切的命令,会发生什么?它可以工作,但由于某种原因,当我将它放入pexpect时它不工作。是的,每次我运行脚本时,它都会让我回到Thomas MBP:Desktop Thomas$,而不是Thomas@jumphost:是啊,每次我写剧本都很奇怪,它让我回到了Thomas MBP:桌面Thomas$,而不是Thomas@jumphost: