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

如何在python中通过SSH注入命令?,python,linux,bash,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] 但是,我有一系列要

为此,不可能使用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]
但是,我有一系列要在secure shell上执行的命令:

commands = ["cd somepath/file/examplefilepath","./examplebashscript"]
我希望按时间顺序在我从python程序ssh插入的卡上执行:

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新手。

必须将命令传递给
ssh
本身
self.ssh(…)
在退出远程shell之前不会返回。这将需要修改
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这样的库来打开连接并一次发送一个命令。

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

名字 ssh—OpenSSH客户端(远程登录程序)

概要 ssh[-46AaCfGgKkMNnqsTtVvXxYy][-B绑定\接口][-B绑定\地址] [-c cipher_spec][D[bind_address:]port][E log_file] [-e escape\u char][-F configfile][-I pkcs11][-I identity\u文件] [-J目的地][-L地址][-L登录名][-m mac\U规范] [-O ctl\U cmd][-O选项][-p端口][-Q查询选项][-R地址] [-S ctl_路径][W主机:端口][W本地\u tun[:远程\u tun]]目标 [命令]

因此,出现了一个更简单的解决方案:将希望运行的命令放在服务器上的单个脚本文件中。然后简单地运行ssh命令,如下所示:

ssh <server> ./script.sh
ssh./script.sh

本例假设脚本文件位于您登录的用户的主目录中。否则,只需指定文件的完整路径。

感谢您现在测试它,上面代码中的输出也应替换为“cmd”