Python更新服务器SSH密钥

出于安全考虑,需要更换服务器上的ssh密钥,但是重复一台一台服务器更改又太浪费时间,这种重复又浪费时间的工作就交给计算机吧。在网上查了查,paramiko正适合,看了看文档,不错,说干就干。

先安装paramiko

pip install paramiko

密钥忘生成了,我这里使用git-bash带的命令进行生成,切记不要忘记备份原密钥。

ssh-keygen -o

下面是对应的脚本,paramiko使用起来还是比较优雅的,简单看看就能理解。

import paramiko

old_key = r'D:\tmp\id_rsa'
new_key = r'C:\Users\ROOT\.ssh\id_rsa'
new_pub_key = r'C:\Users\ROOT\.ssh\id_rsa.pub'

def ssh_key(host:str):
    # 密钥
    pkey = paramiko.RSAKey.from_private_key_file(old_key)
    # 使用transport实现执行多个操作
    trans = paramiko.Transport((host, 22))
    trans.connect(username='root', pkey=pkey)

    ssh = paramiko.SSHClient()
    # 将sshclient的对象的transport指定为以上的trans
    ssh._transport = trans

    # 使用sftp上传文件
    sftp = paramiko.SFTPClient.from_transport(trans)
    sftp.put(localpath=new_pub_key, remotepath='/root/.ssh/authorized_keys')
    sftp.put(localpath=new_key, remotepath='/root/.ssh/id_rsa')

    stdin, stdout, stderr = ssh.exec_command('systemctl restart sshd')

    print(stdout.read().decode())

    trans.close()

if __name__ == '__main__':
    ssh_key('192.168.1.200')

脚本运行之后,试试能不能登录上,登不上去那就。。。

参考文档

使用 Python ssh 远程登陆服务器的最佳方案


Python更新服务器SSH密钥
https://blog.yjll.blog/post/65ba80c8.html
作者
简斋
发布于
2021年11月5日
许可协议