Python SSH批量密钥登录

在进行服务器管理时,经常需要通过SSH协议登录服务器进行操作。而使用密钥登录相比密码登录更加安全和方便,可以大大提高服务器的安全性。本文将介绍如何使用Python实现批量密钥登录,以便简化管理多台服务器的过程。

密钥登录原理

密钥登录是通过将本地生成的公钥上传到服务器端,以实现无需输入密码即可登录的方式。具体原理是:本地生成一对密钥(公钥和私钥),将公钥上传到服务器的authorized_keys文件中。当使用私钥连接服务器时,服务器会验证私钥和公钥是否匹配,如果匹配则登录成功。

Python实现批量密钥登录

首先,我们需要安装paramiko库,用于实现SSH连接和操作。

pip install paramiko

接下来,我们编写Python代码实现批量密钥登录功能。具体步骤如下:

  1. 导入必要的库
import paramiko
  1. 定义服务器列表和密钥路径
server_list = [
    {'hostname': 'server1', 'username': 'root'},
    {'hostname': 'server2', 'username': 'root'}
]

private_key_path = '/path/to/private_key'
  1. 批量连接服务器并执行命令
def ssh_login(hostname, username, private_key_path):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    private_key = paramiko.RSAKey.from_private_key_file(private_key_path)
    
    try:
        client.connect(hostname=hostname, username=username, pkey=private_key)
        stdin, stdout, stderr = client.exec_command('ls')
        print(stdout.read().decode())
    except Exception as e:
        print(f'Error connecting to {hostname}: {str(e)}')
    finally:
        client.close()

for server in server_list:
    ssh_login(server['hostname'], server['username'], private_key_path)

以上代码中,我们定义了一个ssh_login函数,用于连接服务器并执行ls命令。然后遍历服务器列表,分别连接每台服务器并执行命令。

结语

通过上述方法,我们可以实现批量密钥登录多台服务器,简化管理和操作过程。在实际应用中,可以根据需求扩展功能,比如批量上传文件、执行脚本等。同时,密钥登录可以提高服务器的安全性,避免密码泄露的风险。

pie
    title 配置方式占比
    "密钥登录" : 70
    "密码登录" : 30

希望本文对您有所帮助,谢谢阅读!