paramiko 模块

发布时间 2023-07-08 10:36:20作者: f_carey

paramiko 模块

1 远程连接ssh

1.1 使用用户名及密码连接ssh

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)

# 连接服务器
ssh.connect(
    hostname="10.1.1.5",
    port=22,
    username="root",
    password="toor",
)

# 执行命令
stdin, stdout, stderr = ssh.exec_command("df")

# 获取命令结果
res = stdout.read()

# 关闭连接
ssh.close()

print(res)

1.2 使用公私钥远程连接ssh

  • 使用 ssh-keygen 生成 RSA 加密方式的公私钥文件

    [root@ac ~]# ssh-keygen -t rsa 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):             
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:RpehMZSl4r7ugXtLv5itUlLzWwcxz5OB9MgoXJmllP0 root@ac.lab
    The key's randomart image is:
    +---[RSA 2048]----+
    |       .*X=.     |
    |     . o=O==.    |
    |      + * =*.o   |
    |     .o+ .. E    |
    |     ..oS  . .   |
    |    .o... . .    |
    |    .o+  o .     |
    |    .o.B.        |
    |    .=Oo+.       |
    +----[SHA256]-----+
    [root@ac ~]# cd .ssh/
    [root@ac .ssh]# ls
    id_rsa  id_rsa.pub
    
  • 将生成的rsa私钥文件拷贝至本地当前目录

    import paramiko
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    
    private_key = paramiko.RSAKey.from_private_key_file(filename="id_rsa")
    # 连接服务器
    ssh.connect(
        hostname="10.1.1.5",
        port=22,
        username="root",
        password="toor",
        pkey=private_key
    )
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command("df")
    
    # 获取命令结果
    res = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(res)
    
    

2 上传下载文件

import paramiko

# 创建文件传输对象
file_trans = paramiko.Transport(("10.1.1.5", 22))

# 连接服务器
file_trans.connect(username="root", password="toor")

sftp = paramiko.SFTPClient.from_transport(file_trans)
# 将 getssh.py 上传至服务器 /tmp/ssh.py
sftp.put("./getssh.py","/tmp/ssh.py")
# 将服务器 /etc/passwd 下载至本地 passwd.txt
sftp.get("/etc/passwd","./passwd.txt")

file_trans.close()