python批量上传 服务器_批量上传公钥到Linux服务器

一直以来,都通过ssh-copy-id在手动上传公钥,想着如果有上千台服务器需要上传公钥的话,这个方法就行了。试着实现下批量上传公钥到Linux服务器,介绍本人试的一个方法。

1: 先通过python脚本来试一台机器,python脚本如下:

#!/usr/bin/python

import sys

import pexpect

ip = sys.argv[1]

password = sys.argv[2]

expect_list = ['(yes/no)', 'password:']

p = pexpect.spawn('ssh-copy-id %s' % ip)

try:

while True:

idx = p.expect(expect_list)

print p.before + expect_list[idx],

if idx == 0:

print "yes"

p.sendline('yes')

elif idx == 1:

print password

p.sendline(password)

except pexpect.TIMEOUT:

print >>sys.stderr, 'timeout'

except pexpect.EOF:

print p.before

print >>sys.stderr, ''

使用方法: python sendpublic.py 192.168.2.10 password #用户名和密码没错一般都可以。

2: 上面的python结合shell实现批量上传

把服务器的ip和密码列在一个txt文件中,例如(b.txt):

192.168.1.1 password1

192.168.1.2 password2

192.168.1.3 password3

实现批量上传借助的shell程序如下:

cat a.txt |while read line;do

ip=`echo $line | awk '{print $1}' #提取ip

password=`echo $line | awk '{print $2}'` #提取password

python sendpublic.py $ip $password

done

如上所述,需要注意:

a.txt的格式,第一个参数是ip,第二个是密码。中间用空格隔开,一般使用这个上批量上传公钥到服务器是没问题的。

如果公钥没在默认位置的话,python脚本里面的这个语句p = pexpect.spawn('ssh-copy-id %s' % ip),把ssh-copy-id改为 ssh-copy-id -i 公钥位置 即可。

另外,上面的程序在运行之前都要先生成个公钥和密码ssh-keygen -t rsa(两次回车即可)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Python中的paramiko库来实现将本机公钥批量发送到服务器的功能。下面是一个示例代码: ```python 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)}') ``` 请确保您已经安装了paramiko库,您可以使用以下命令进行安装: ``` pip install paramiko ``` 请注意,上述示例代码中的`your_username`和`your_password`需要替换为正确的服务器用户名和密码。此外,您还需要将`server_ips`列表中的IP地址替换为实际的服务器IP地址列表。 这段代码会将本机的公钥内容读取,并使用paramiko库连接服务器,将公钥内容追加写入服务器的`~/.ssh/authorized_keys`文件中。循环遍历服务器IP列表,逐个发送公钥到每个服务器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值