天天看點

Python實作ssh遠端執行

paramiko是基于Python實作的SSH2遠端安全連接配接,支援認證及密鑰方式。可以實作遠端指令執行、檔案傳輸、中間SSH代理等功能,相對于Pexpect,封裝的層次更高,更貼近SSH協定的功能

# ssh執行遠端指令腳本

點選檢視

import paramiko
import sys
def pl_ssh(ip,password,username,cmd,port="22"):
    ssh_client=paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    try:
        ssh_client.connect(hostname=ip,username=username,password=password)
    except Exception as e:
        print('伺服器%s連接配接失敗' %ip)
        print(e)
        sys.exit()
    stdin,stdout,stderr=ssh_client.exec_command(cmd)
    print('伺服器%s磁盤使用率情況' %ip)
    print(stdout.read().decode("utf-8"))
    ssh_client.close()
if __name__ == '__main__':
    servers={
        "192.168.0.7":{
            "username": "root",
            "password": "hadoop",
            "cmd": "df -h",
            "port": "22"
        },
        "192.168.0.8":{
            "username": "root",
            "password": "hadoop",
            "cmd": "df -h",
            "port": "22"
        }
    }
    for ip,info in servers.items():
        pl_ssh(ip=ip,
               username=info.get("username"),
               password=info.get("password"),
               cmd=info.get("cmd"),
               port=info.get("port")
               )           

複制

  • 效果驗證
Python實作ssh遠端執行

# ssh上傳下載下傳檔案腳本

點選檢視

import  paramiko
transport = paramiko.Transport(('192.168.0.66', 22))
transport.connect(username='root', password='hadoop')
sftp = paramiko.SFTPClient.from_transport(transport)  #ftp+ssh

#将目前主機F:\學習\k8s\微服務、k8s文檔\jb51.net.txt檔案 放到 192.168.0.66的/home/jb51.net.txt
sftp.put('F:\學習\k8s\微服務、k8s文檔\jb51.net.txt', '/home/jb51.net.txt')
# 下載下傳用get
# sftp.get('/home/jb51.net.txt', 'F:\學習\k8s\微服務、k8s文檔\jb51.net.txt')
transport.close()           

複制

  • 效果驗證
[root@summer ~]# cd /home/
[root@summer home]# ll
total 8
-rw-r--r-- 1 root        root        4848 Dec 19 00:30 jb51.net.txt
drwx--x--x 5 summer summer  106 Dec 17 00:36 summer
[root@summer home]# pwd
/home
[root@summer home]#            

複制