前段时间了解到了开放rpc服务端口会被恶意扫描,如果是弱口令安全性令人担忧,如果使用强密码又不太方便想了如下的解决方案来解决此问题:
第一:
非远程的平时使用pin进行登陆,设置弱口令, 因为pin不可用于远程。
第二:
编写脚本来不断修改windows的密码:
脚本如下:
- 使用Python脚本: Python脚本可以用来生成新密码,运行Windows命令行工具修改密码,并将新密码写入文本文件。
- 使用Windows命令行工具: 可以使用
net user
命令来修改Windows账户的密码。
- 定时任务: 使用Python的定时功能,例如
time.sleep
,来使脚本每20分钟运行一次。
- 安全性考虑: 自动更改密码并将其存储在文本文件中可能会带来安全风险,因此请确保这个脚本在一个安全的环境中运行,并且文本文件得到适当的保护。
import os
import time
import random
import string
def generate_password(length=10):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for i in range(length))
def change_password(username, password):
os.system(f'net user {username} {password}')
def write_password_to_file(password, file_path):
with open(file_path, 'a') as file:
file.write(f'{time.strftime("%Y-%m-%d %H:%M:%S")} - {password}\n')
def main():
username = '你的用户名'
file_path = 'D:\\passwords.txt'
while True:
new_password = generate_password()
change_password(username, new_password)
write_password_to_file(new_password, file_path)
time.sleep(1200) # 等待20分钟
if __name__ == '__main__':
main()
- 这个脚本需要以管理员权限运行。
- 请确保脚本的安全性,避免密码泄露。
- 你需要替换
username
变量的值为你的Windows用户名。
- 修改密码可能会导致系统安全问题或访问问题,确保你了解这一行为的后果。
使用管理员权限运行后即可以,然后使用p2p协议的工具对于密码进行传输,也就是同步到你个人的手机上,这样就可以完美解决密码不安全的问题了,
使用resilio sync即可以实现,注意间断时间设置大一点,最好1h以上,否则p2p可能会传输延迟。
也可以使用弱口令来当作生成的密码 。因为暴力撞出密码(哪怕是弱口令)也需要不短的时间,密码是动态就可以避免这个问题了。
以上是个人的想法不知是否还有漏洞,请各位指教。
此脚本也可以使用bat或者java等其他语言进行编写,我使用的是java版本的:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class PasswordChanger {
private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static final int PASSWORD_LENGTH = 10;
private static final long INTERVAL = 20 * 60 * 1000; // 20分钟
private static final String USERNAME = "你的用户名";
private static final String FILE_PATH = "D:\\passwords.txt";
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
String newPassword = generatePassword();
changePassword(USERNAME, newPassword);
writePasswordToFile(newPassword, FILE_PATH);
}
}, 0, INTERVAL);
}
private static String generatePassword() {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < PASSWORD_LENGTH; i++) {
sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
}
return sb.toString();
}
private static void changePassword(String username, String password) {
try {
Runtime.getRuntime().exec("net user " + username + " " + password);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void writePasswordToFile(String password, String filePath) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
writer.write(password + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}