我想从密码管理器数据库中构建ssh_config和.alias文件。从数据库中,我通过JSON获取所有信息。 然后ssh_config应该如下所示:python替换列表中的元素
Servername
User foo
Port 22
Hostname Servername
可能会出现其他值。别名文件获得相同的值,但在一行中:
alias Servername="ssh -p 22 [email protected]"
到目前为止这么好,这工作正常。但是现在密码数据库有几个条目,一些是相同的服务器,但是不同的用户。我想要一个用户名的文件只能以“foo”或“bar”开头,对于任何其他我假设有管理员用户,如果有这样一个管理员用户的条目我想这个用户,而不是任何“foo “或‘ - ’ 这是目前我的函数来创建ssh_config中和别名文件
# define function to add values to files
def fillSSH (item, ssh_config, alias):
# split item name, first is customer server
shortname = item.get('name').split()
# append Host entry to ssh_config
ssh_config.append('Host ' + shortname[0])
# append User entry to ssh_config
ssh_config.append(' User ' + access_url[3])
# If there is a :[port] at the end, we have 6 objects
if len(access_url) >= 6:
# append Port entry to ssh_config if it exists
ssh_config.append(' Port ' + access_url[5])
# create the alias entry just once
aliasurl = 'alias ' + shortname[0] + '="ssh -p' + access_url[5] + ' ' + access_url[3] + '@' + access_url[4] + '"'
else:
# create the alias entry just once
aliasurl = 'alias ' + shortname[0] + '="ssh ' + access_url[3] + '@' + access_url[4] + '"'
# append HostName entry to ssh_config
ssh_config.append(' HostName ' + access_url[4])
# append empty line
ssh_config.append('')
# append entry for alias to list
alias.append(aliasurl)
现在我不知道如何与我不同的用户进行。我有类似的东西
# split access url by :/@
access_url = re.split(':|/|@',item.get('access_info'))
# if foo or bar, for everyone
if access_url[3] == 'foo' or access_url[3] == 'bar':
fillSSH (item, ssh_config, alias)
# else just for admins if not seen before
else:
fillSSH (item, ssh_config_admins, alias_admins)
所以目前我有两个想法,我可以在这里继续。 1)我必须添加一个var“看到”我添加所有服务器名称。如果我看到Servername并且新用户是“foo”或“bar”,我可以忽略管理列表的条目并将其添加到普通列表中。但是如果我看到Servername和新用户不是“foo”或“bar”,那么我需要在ssh_config_admins中找到旧条目来替换它。
2)另一个想法是创建一个包含所有“foo”和“bar”用户的列表以及所有其他用户的列表。但是,如果没有其他登录名的服务器,我想为我的管理员设置“foo”和“bar”用户,那么在这种情况下如何合并它们?我想我必须在列表中走两遍,一次获得所有非“foo”和“bar”用户,第二次获得foo和bar,如果servername已经在我的列表中,我只需将它们添加到全部列表而不是管理员列表。
因此,对于这两种情况,我不知道如何真正解决它们,也许有人知道如何甚至是另一种方式我可以去这里。
我看到了你的问题的标题。你可以像下面这样替换列表中的元素:your_list [i] = new_object – 2015-02-09 11:51:45