优化这段代码,功能是:“读取一个保存着服务器IP地址、用户、密码的文件,然后将本机公钥发送到服务器” import paramiko import os # 服务器IP地址列表 server_ips = ['192.168.0.1', '192.168.0.2', '192.168.0.3'] # 本机公钥文件路径 public_key_path = os.path.expanduser("~/.ssh/id_rsa.pub") # 获取本机公钥内容 with open(public_key_path, 'r') as f: public_key = f.read() # 遍历服务器IP地址列表 for ip in server_ips: try: # 创建SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 client.connect(ip, username='your_username', password='your_password') # 将本机公钥写入服务器的authorized_keys文件 command = f'echo "{public_key}" >> ~/.ssh/authorized_keys' stdin, stdout, stderr = client.exec_command(command) # 打印执行结果 print(f'公钥已成功发送到服务器 {ip}') # 关闭SSH连接 client.close() except Exception as e: print(f'发送公钥到服务器 {ip} 失败: {str(e)}')
时间: 2024-04-08 14:33:14 浏览: 96
要实现读取保存着服务器IP地址、用户和密码的,并将本机公钥发送到这些服务器您可以按照以下方式进行优化代码:
```python
import paramiko
import os
# 读取服务器IP地址、用户和密码的文件
server_list_file = 'server_list.txt'
# 本机公钥文件路径
public_key_path = os.path.expanduser("~/.ssh/id_rsa.pub")
# 获取本机公钥内容
with open(public_key_path, 'r') as f:
public_key = f.read()
# 遍历服务器列表文件
with open(server_list_file, 'r') as f:
for line in f:
# 解析每一行的服务器IP地址、用户和密码
ip, username, password = line.strip().split(',')
try:
# 创建SSH客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
client.connect(ip, username=username, password=password)
# 将本机公钥写入服务器的authorized_keys文件
command = f'echo "{public_key}" >> ~/.ssh/authorized_keys'
stdin, stdout, stderr = client.exec_command(command)
# 打印执行结果
print(f'公钥已成功发送到服务器 {ip}')
# 关闭SSH连接
client.close()
except Exception as e:
print(f'发送公钥到服务器 {ip} 失败: {str(e)}')
```
您需要创建一个名为`server_list.txt`的文件,其中每一行包含一个服务器的IP地址、用户名和密码,用逗号分隔。例如:
```
192.168.0.1,username1,password1
192.168.0.2,username2,password2
192.168.0.3,username3,password3
```
上述代码会逐行解析服务器列表文件,并连接每个服务器,将本机公钥写入`~/.ssh/authorized_keys`文件中。请确保`server_list.txt`文件的格式正确,并且每个服务器的用户名和密码与文件中的一致。
阅读全文