无法使用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。
答案 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
此示例假定您的脚本文件位于您以其身份登录的用户的主目录中。否则,只需指定文件的完整路径即可。