python批量修改linux主机密码
时间: 2023-06-28 16:16:14 浏览: 138
可以使用Python的paramiko库连接到Linux主机并执行密码修改命令。以下是一个简单的示例代码:
``` python
import paramiko
# 主机信息
host = 'your_host_ip'
port = 22
username = 'your_username'
old_password = 'your_old_password'
new_password = 'your_new_password'
# SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, port=port, username=username, password=old_password)
# 执行密码修改命令
stdin, stdout, stderr = ssh.exec_command('echo -e "{}\n{}" | passwd'.format(new_password, new_password))
# 输出结果
print(stdout.read().decode())
print(stderr.read().decode())
# 关闭连接
ssh.close()
```
在执行命令时,使用echo命令将新密码传递给passwd命令进行修改。注意,这里使用了双引号,以便在新密码中包含特殊字符时可以正确传递。
相关问题
python的实现远程登录Linux服务器,并且批量安装软件
以下是一个示例代码,用于远程登录Linux服务器并批量安装软件:
```python
import paramiko
# 定义远程服务器的IP地址和登录信息
host = 'xxx.xxx.xxx.xxx'
port = 22
username = 'root'
password = 'password'
# 定义要安装的软件包列表
packages = ['nginx', 'mysql', 'python']
# 创建SSH客户端对象
ssh = paramiko.SSHClient()
# 自动添加远程服务器的主机密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程服务器
ssh.connect(host, port, username, password)
# 循环遍历软件包列表,逐个安装
for package in packages:
# 使用SSH执行命令
stdin, stdout, stderr = ssh.exec_command('yum install -y {}'.format(package))
# 打印命令执行结果
print(stdout.read().decode())
# 断开SSH连接
ssh.close()
```
需要注意的是,这个示例代码假设已经安装了paramiko库,如果没有安装,需要先执行`pip install paramiko`命令安装。另外,为了安全起见,建议不要在代码中明文存储密码,可以使用环境变量或者配置文件等方式来存储密码,并在代码中读取。
写出批量查询100台linux系统中所有用户密码是否过期以及账户是否锁定的python脚本,查询账户是否锁定用 pam_tally2 --user
以下是一个简单的Python脚本,用于批量查询100台Linux系统中所有用户密码是否过期以及账户是否锁定:
```python
import paramiko
# 定义主机列表和ssh连接的用户名和密码
host_list = ['192.168.1.1', '192.168.1.2', '192.168.1.3', ..., '192.168.1.100']
username = 'your_username'
password = 'your_password'
# 建立ssh连接
def ssh_connect(ip, username, password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username=username, password=password)
return ssh
for host in host_list:
ssh = ssh_connect(host, username, password)
# 查询所有用户密码是否过期
stdin, stdout, stderr = ssh.exec_command("grep '^\\+\\w*\\:\\*\\:' /etc/shadow | cut -d ':' -f 1")
accounts = stdout.readlines()
for account in accounts:
account = account.strip()
stdin, stdout, stderr = ssh.exec_command("chage -l " + account + " | grep 'Password expires' | awk '{print $4}'")
password_expire = stdout.read().strip()
if password_expire == "never":
print("Account {0} on {1} does not have a password expiration date.".format(account, host))
else:
print("Account {0} on {1} has a password expiration date of {2}.".format(account, host, password_expire))
# 查询所有用户账户是否锁定
stdin, stdout, stderr = ssh.exec_command("grep '^\\+\\w*\\:\\*\\:' /etc/shadow | cut -d ':' -f 1")
accounts = stdout.readlines()
for account in accounts:
account = account.strip()
stdin, stdout, stderr = ssh.exec_command("pam_tally2 --user=" + account + " | grep 'locked' | awk '{print $6}'")
if stdout.read().strip() == "locked":
print("Account {0} on {1} is locked.".format(account, host))
else:
print("Account {0} on {1} is not locked.".format(account, host))
ssh.close()
```
注意:此脚本假设您已经在所有主机上安装了paramiko和pam_tally2,否则需要先安装。此外,此脚本仅用于演示目的,实际使用时请根据需要进行修改和测试。
阅读全文