如何在python中通过SSH注入命令?

时间:2018-10-18 14:28:11

标签: python linux bash

无法使用paramiko。


这是针对在Linux操作系统上运行的python程序的。 使用以下方法,我可以成功将ssh放入架子上的另一张卡中。

def ssh(self, target_arg):
        cmd = self.get_command_output(subprocess.Popen(["ssh", target_arg], stdout=subprocess.PIPE))
        return cmd.communicate()[0]

但是我有一系列要在安全外壳上执行的命令:

commands = ["cd somepath/file/examplefilepath","./examplebashscript"]

我想按时间顺序在我从python程序切入的卡上执行:

def ssh_with_commands(self, target_arg, commands):
        self.ssh(target_arg)
        for command in commands:
            # execute command on target shelf shell

,然后在原始线程上继续运行python程序的其余部分。


关于如何将这些命令通过管道传输到ssh的任何解决方案或可能的解决方案是什么?

真诚地是python和linux newb。

2 个答案:

答案 0 :(得分:1)

必须将命令传递给ssh本身;在退出远程外壳程序之前,self.ssh(...)不会返回。这将需要修改ssh

def ssh(self, target_arg, commands=None):
        cmd_args = ["ssh", target_arg]
        if commands is not None:
            cmd_args.append(";".join(commands))
        output = self.get_command_output(subprocess.Popen(cmd_args, stdout=subprocess.PIPE))
        return cmd.communicate()[0]

请注意,这在报价方面有一些明显的缺点;您最好使用Paramiko之类的库来打开连接并一次发送一个命令。

答案 1 :(得分:1)

SSH已经允许运行命令而不是Shell。

  

NAME        ssh-OpenSSH SSH客户端(远程登录程序)

     

简介        ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]            [-c cipher_spec] [-D [bind_address:]端口] [-E log_file]            [-escape_char] [-F配置文件] [-I pkcs11] [-i identity_file]            [-J目标] [-L地址] [-l登录名] [-m mac_spec]            [-O ctl_cmd] [-o选项] [-p端口] [-Q query_option] [-R地址]            [-S ctl_path] [-W host:port] [-w local_tun [:remote_tun]]目的地            [命令]

因此,出现了一个更简单的解决方案:将要运行的命令放在服务器上的单个脚本文件中。然后像这样简单地运行您的ssh命令:

result

此示例假定您的脚本文件位于您以其身份登录的用户的主目录中。否则,只需指定文件的完整路径即可。