1. 程式人生 > >python實戰之paramiko模組

python實戰之paramiko模組

基於密碼

ssh.py #相當於 ssh簡單連線操作原理

__author__ = "Burgess Zheng"

import paramiko
# 建立SSH物件
ssh = paramiko.SSHClient()
# 允許連線不在know_hosts檔案中的主機#如:ssh rsa加密連線原理
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連線伺服器
ssh.connect(hostname='10.0.0.150', port=52113, username='root', password='123456')
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')#Linux命令返回3個值
# 執行ssh.exec_command('df') 該命令會返回3個值
#stdin:標準輸入  stdout:標準輸出    stderr:標準錯誤
res,err = stdout.read(),stderr.read()
#stdoutread():讀標準輸出的結果  stderr.read()讀標準錯誤的結果
#把讀出的結果分別賦值給res和err
result = res if res else err
#三元運算 如果res有值result = res 如果res沒值就 result = err
print(result.decode())

# 關閉連線
ssh.close()

ssh_sft.py  #相當於 ssh的scp傳檔案原理

__author__ = "Burgess Zheng"

import paramiko
transport = paramiko.Transport(('10.0.0.31', 52113))
transport.connect(username='root', password='123456')
#上面的只做連線

sftp = paramiko.SFTPClient.from_transport(transport)

#sftp.put('筆記', '/tmp/test_from_win')
    #將location.py 上傳至伺服器 /tmp/test.py


sftp.get('/root/oldgirl.txt', 'fromlinux.txt')
# 將remove_path 下載到本地 local_path

transport.close()

 

基於祕鑰

ssh rsaa  python基於金鑰的連線(和ssh基於金鑰連線一樣的)

__author__ = "Burgess Zheng"

#基於祕鑰連線

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa31.txt')
#指定你的私鑰的位置

# 建立SSH物件
ssh = paramiko.SSHClient()

# 允許連線不在know_hosts檔案中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 連線伺服器
ssh.connect(hostname='10.0.0.41', port=52113, username='gongli', pkey=private_key)

# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
result = stdout.read()
print(result.decode())
stdin, stdout2, stderr = ssh.exec_command('ifconfig')#兩條命令可以當做一條命令使用(''df;ifconfg)
# 獲取命令結果
result2 = stdout2.read()
print(result2.decode())

# 關閉連線
ssh.close()

ssh sftp python基於金鑰的上傳下載(和ssh scp基於公鑰上傳下載一樣的)

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key )
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至伺服器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 將remove_path 下載到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()