Paramiko sed 查找和替换不会通过
Paramiko sed find and replace wont pass through
我目前正在编写一个脚本,当我启动一个 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
很简单,我必须将其添加到命令中。
get_pty=True
所以
stdin , stdout, stderr = c.exec_command('sudo sed -i -E "s/^HOSTNAME.*/HOSTNAME=testhost.company/" /etc/sysconfig/network',get_pty=True)
我目前正在编写一个脚本,当我启动一个 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
很简单,我必须将其添加到命令中。
get_pty=True
所以
stdin , stdout, stderr = c.exec_command('sudo sed -i -E "s/^HOSTNAME.*/HOSTNAME=testhost.company/" /etc/sysconfig/network',get_pty=True)