python可以从fi读取服务器名称吗

2024-10-01 00:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

python是否可以从一个文件中读取服务器名/IP_地址,而不是逐个给出服务器名,我确实进行了搜索,但没有找到任何关于它的信息。 我有下面的脚本,但这只采取单一的IP地址或服务器名称一次。感谢您的任何意见。。在

这是针对Linux和Python2.6版的

#!/usr/bin/env python
import sys
sys.stderr = open('/dev/null')       # Silence silly warnings from paramiko
import paramiko as pm
sys.stderr = sys.__stderr__
import os

class AllowAllKeys(pm.MissingHostKeyPolicy):
    def missing_host_key(self, client, hostname, key):
        return

HOST = '192.1.10.1'
USER = 'karn'
PASSWORD = 'mypass'

client = pm.SSHClient()
client.load_system_host_keys()
client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
client.set_missing_host_key_policy(AllowAllKeys())
client.connect(HOST, username=USER, password=PASSWORD)

channel = client.invoke_shell()
stdin = channel.makefile('wb')
stdout = channel.makefile('rb')

stdin.write('''
hostname
uname -a
uptime
who
exit
''')
print stdout.read()

stdout.close()
stdin.close()
client.close()

注意:我希望python读取包含服务器名称或ip地址的文件。。示例如下。。在

^{pr2}$

Below code is working now..appreciate your help guys

#!/usr/bin/python
import fileinput
import sys
import paramiko as pm
import os

sys.stderr = open('/dev/null')       # Silence silly warnings from paramiko
sys.stderr = sys.__stderr__


class AllowAllKeys(pm.MissingHostKeyPolicy):
    def missing_host_key(self, client, hostname, key):
        return

with open('/home/karn/PYTHN/host.txt', 'r') as f:
    for host in f:
        HOSTN = host.rstrip()
        USER = 'myuser'
        PASSWORD = 'mypass'

        client = pm.SSHClient()
        client.load_system_host_keys()
        client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
        client.set_missing_host_key_policy(AllowAllKeys())
        client.connect( HOSTN, username=USER, password=PASSWORD )

        channel = client.invoke_shell()
        stdin = channel.makefile('wb')
        stdout = channel.makefile('rb')

        stdin.write('''
        hostname
        lsb_release -a
        exit
        ''')
        print stdout.read()

        stdout.close()
        stdin.close()
        client.close()

Tags: keyimport服务器clienthostparamikocloseos
3条回答

下面是一个示例,我可以从/etc/hosts获取主机名和IP地址:

with open ('/etc/hosts', 'r') as hosts:
   for line in hosts:
       l = line.split()
       if len(l) > 1:
          IP = l[0].rstrip()
          print IP
          Hostname = l[1].rstrip()
          print Hostname

使用with open可以确保python正确地处理和关闭文件。在

然后读每一行。它是一个字符串,split()将返回一个数组。因为我是从/etc/hosts读取的,所以第一个元素是IP地址,第二个元素是主机名。我使用rstrip来确保没有额外的字符妨碍。在

从那里你需要调整你的文件是什么样子。在

您可以使用一个包含3列的csv文件,其中一列用于HOSTUSER和{}。这是官方的examples。在您的代码中,您将循环遍历行并提取每行中的3个字段,如示例所示。在

打开文件并读取每一行之后,还可以尝试使用正则表达式进行提取。在

如果您知道您的ip范围:

matchIP = re.compile(r"192\.168\.1\.\d{0,225}$") #

和你的服务器名称一样

相关问题 更多 >