python實(shí)現(xiàn)ssh及sftp功能(實(shí)例代碼)
1.在Linux上我們通過scp命令實(shí)現(xiàn)主機(jī)間的文件傳送,通過ssh實(shí)現(xiàn)遠(yuǎn)程登錄 ,比如 我們經(jīng)常使用的xshell遠(yuǎn)程登錄工具,就是基礎(chǔ)ssh協(xié)議實(shí)現(xiàn)window主機(jī)遠(yuǎn)程登錄Linux主機(jī)
下面簡單的在python實(shí)現(xiàn)這幾個(gè)功能 下面使用到paramiko模塊,這個(gè)不是python的內(nèi)置模塊,我直接通過pycharm下載這個(gè)模塊,
第一步實(shí)現(xiàn)一個(gè)簡單的ssh登錄命令 代碼如下:
import paramiko
# 創(chuàng)建SSH對(duì)象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機(jī)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#第一次登錄的認(rèn)證信息
# 連接服務(wù)器
ssh.connect(hostname='192.168.158.131', port=22, username='root', password='hadoop')
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('ls /')
# 獲取命令結(jié)果
res,err = stdout.read(),stderr.read()
result = res if res else err
print(result.decode())
# 關(guān)閉連接
ssh.close()
登錄并能實(shí)現(xiàn)簡單的命令發(fā)送 和接收指令結(jié)果 ,這里面的方法寫死了 ,但總算連接成功了,應(yīng)為開始虛擬機(jī)的在學(xué)習(xí)iptables加了許多規(guī)則,并且在ssh 的服務(wù)器端修改了默認(rèn)端口一直
連不上,修改配置文件后設(shè)置允許遠(yuǎn)程主機(jī)遠(yuǎn)程連接 ,/etc/ssh/sshd_config文件中配置
然后實(shí)現(xiàn)模擬Linux的scp 命令上傳下載文件 ,使用了paramiko的Transport 簡單的測試代碼如下
import paramiko
transport = paramiko.Transport(('192.168.158.131', 22))
transport.connect(username='root', password='hadoop')
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至服務(wù)器 /tmp/test.py
sftp.put('fromlinux.txt', '/tmp/test_from_win')
# 將remove_path 下載到本地 local_path
# sftp.get('/root/oldgirl.txt', 'fromlinux.txt')
transport.close()
同樣的也能 測試成功 ,能實(shí)現(xiàn)文件的上傳與下載
最后注意到paramiko.RSAKey這個(gè)功能,能思想比較牛逼的ssh免密登錄,核心的過程就是在Linux通過ssh-keygen在主機(jī)上生成一對(duì)密鑰 ,公鑰放在~/.ssh/authorized_keys文件在,將私鑰拷貝到windows主機(jī)的環(huán)境目錄下 ,
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('id_rsa31.txt')#要將私鑰放在這里
# 創(chuàng)建SSH對(duì)象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機(jī)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務(wù)器
ssh.connect(hostname='10.0.0.41', port=22, username='fang', pkey=private_key)
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('df;ifconfig')
result = stdout.read()
print(result.decode())
stdin, stdout2, stderr = ssh.exec_command('ifconfig')
# 獲取命令結(jié)果
result2 = stdout2.read()
print(result2.decode())
# 關(guān)閉連接
ssh.close()
成功的實(shí)現(xiàn)了免密連接,代碼知識(shí)做簡單的測試用,以連接為主,沒考慮其他的實(shí)際需要
這些東西玩了一下午,還是挺神奇的,
總結(jié)
到此這篇關(guān)于python實(shí)現(xiàn)ssh及sftp功能 的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)ssh sftp 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python 使用SFTP和FTP實(shí)現(xiàn)對(duì)服務(wù)器的文件下載功能
- python從ftp獲取文件并下載到本地
- Python+pyftpdlib實(shí)現(xiàn)局域網(wǎng)文件互傳
- python實(shí)現(xiàn)從ftp上下載文件的實(shí)例方法
- Python如何實(shí)現(xiàn)FTP功能
- 基于python實(shí)現(xiàn)FTP文件上傳與下載操作(ftp&sftp協(xié)議)
- Python Socketserver實(shí)現(xiàn)FTP文件上傳下載代碼實(shí)例
- python實(shí)現(xiàn)ftp文件傳輸功能
- python實(shí)現(xiàn)FTP文件傳輸?shù)姆椒ǎǚ?wù)器端和客戶端)
- python實(shí)現(xiàn)從ftp服務(wù)器下載文件
- python FTP編程基礎(chǔ)入門
相關(guān)文章
Python基本數(shù)據(jù)結(jié)構(gòu)之字典類型dict用法分析
這篇文章主要介紹了Python基本數(shù)據(jù)結(jié)構(gòu)之字典類型dict用法,結(jié)合實(shí)例形式分析了Python字典類型dict概念、原理、定義及基本使用技巧,需要的朋友可以參考下2019-06-06
跟老齊學(xué)Python之大話題小函數(shù)(1)
今天本講要講什么呢?今天要介紹幾個(gè)python中的小函數(shù),這幾個(gè)函數(shù)都是從函數(shù)式編程借鑒過來的,它們就是:filter、map、reduce、lambda、yield 有了它們,最大的好處是程序更簡潔2014-10-10
Python中dictionary items()系列函數(shù)的用法實(shí)例
這篇文章主要介紹了Python中dictionary items()系列函數(shù)的用法,很實(shí)用的函數(shù),需要的朋友可以參考下2014-08-08
python+selenium打印當(dāng)前頁面的titl和url方法
今天小編就為大家分享一篇python+selenium打印當(dāng)前頁面的titl和url方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python矩陣常見運(yùn)算操作實(shí)例總結(jié)
這篇文章主要介紹了Python矩陣常見運(yùn)算操作,結(jié)合實(shí)例形式總結(jié)分析了Python矩陣的創(chuàng)建以及相乘、求逆、轉(zhuǎn)置等相關(guān)操作實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09
python常用數(shù)據(jù)結(jié)構(gòu)元組詳解
這篇文章主要介紹了python常用數(shù)據(jù)結(jié)構(gòu)元組詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

