【问题标题】:Paramiko sed find and replace wont pass throughParamiko sed 查找和替换不会通过
【发布时间】:2016-10-27 20:04:07
【问题描述】:

我目前正在编写一个脚本,当我启动一个 EC2 实例时,我会发送一个 paramiko 命令来重命名主机名。因为这是一个定制的 AMI,我不能使用 AWS Boto3 CLI 来做,所以我需要通过 SSH 命令来做。

我遇到的问题是 Paramiko 似乎无法通过我的特定命令。它会很好地传递其他命令,但我假设我遇到了 paramiko 或 python 的某种限制,并且似乎无法对其进行故障排除。这是针对 RHEL 实例的,因此重命名网络文件是我能想到的唯一方法。

如果我通过主机终端按原样运行命令,它就可以工作。所以 paramiko 和这个命令之间的东西似乎是阻碍。

这是我的示例脚本,它应该可以工作,但似乎无法运行该命令。

#!/usr/bin/env python
import boto3
import time
import subprocess
import paramiko
import StringIO

c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())

c.connect(hostname = '12.34.56.78', username = "username", key_filename='''/Users/mallachar/Downloads/testkey.pem''' )
stdin , stdout, stderr = c.exec_command('sudo sed -i -E "s/^HOSTNAME.*/HOSTNAME=testhost.company/" /etc/sysconfig/network')

print stdout.read()
print stderr.read()

c.close

这是我打印标准输出和标准错误

sudo: sorry, you must have a tty to run sudo

【问题讨论】:

  • 您是否看到错误消息? stdoutstderr 是否包含任何内容?你可以运行任何命令(如echo)并看到一些东西吗? sudo 权限是否正确设置? exec 命令中的双引号是否有问题,也许它们需要转义?
  • @Pyrce 这是我打印时得到的输出。 <paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xc533310L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>><paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xc533310L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>Out[16]: <bound method SSHClient.close of <paramiko.client.SSHClient object at 0x10c5331d0>>
  • 那些是标准输出和标准错误信息?那些看起来就像你打印的c
  • 我更新了代码以显示我所做的。
  • 为什么要对抽象的 python 部分进行讨论?当一个简单的 ssh -t -i /Users/mallachar/Downloads/testkey.pem username@12.34.56.78 "sudo sed ..." 等就可以了。 (ssh 命令的 -t 分配一个伪终端,因此 sudo 可以工作)。

标签: python linux bash sed paramiko


【解决方案1】:

很简单,我必须将它添加到命令中。

get_pty=True

所以

stdin , stdout, stderr = c.exec_command('sudo sed -i -E "s/^HOSTNAME.*/HOSTNAME=testhost.company/" /etc/sysconfig/network',get_pty=True)

【讨论】:

  • 它告诉我必须等待接受我自己的。当我尝试点击它时说You can accept your own answer in 23 hours
猜你喜欢
  • 2020-06-24
  • 2020-02-03
  • 2020-08-05
  • 2012-06-09
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多