Python編寫的ssh客戶端 類似putty

2022-08-19 17:57:11 字數 2676 閱讀 2531

windows下可以通過putty以ssh方式連線linux主機。但putty也有一些問題:比如沒有儲存session,亂碼等等。

偶然發現python也有ssh模組,學習的同時嘗試使用python編寫乙個類似putty的ssh客戶端。

python2.7 + pycrypto + paramiko + ecdsa

後面三個是python的擴充套件模組,實現了ssh連線功能。

安裝十分簡單,進入模組根目錄執行 python setup.py build install命令即可。

說明:linux下可按此安裝。windows下我未編譯通過,可使用編譯好的版本,直接拷貝至lib\site-packages下即可。

下面是乙個windows下編譯好的版本:win7下編譯好的python ssh模組

1)通過paramiko的ssh模組連線指定主機;

2) 通過sshclient.exec_command在遠端主機上執行命令;

3)通過exec_command返回的stdout,stdin,stderr進行互動;

4)儲存成功連線的主機資訊(session),可以通過ls命令檢視, session id命令,直接啟動新連線;

5)可在windows和linux下執行,寫程式時需要注意他們的差別。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import os,sys

import paramiko

import threading

import platform

curr_ssh = none

curr_prompt = ">>"

#使用說明

def printusage():

print " !ls :list sessions."

print " !session id :connect session."

print " !conn host user password:connect host with user."

print " !exit :exit."

#連線

def conn(ip,username,passwd):

try:

ssh = paramiko.sshclient()

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

ssh.connect(ip,22,username,passwd,timeout=5)

print "connect to ",ip," with ",username

global curr_prompt

curr_prompt=username+"@"+ip+">>"

return ssh

except:

return none

#載入以前的連線資訊

sessions=

def loadsessions():

global sessions

try:

f = open("sessions")

sessions = f.readlines()

f.close()

except:

pass

#執行本地命令,ssh.py的命令

def exe_cmd_local(cmd):

if(cmd == "!ls"):

loadsessions()

global sessions

i=0print "sessions:"

for s in sessions:

print"[%d] %s" %(i,s)

i+=1

else:

vals = cmd.split(' ')

if(vals[0]=="!session"):

id = (int)(vals[1])

if(id可以直接ssh.py,進入主選單:

通過!conn   host  usrname  passwd連線:

也可以ssh.py  host  usrname  passwd,直接連線指定的客戶機。

可以通過!ls 檢視儲存的session列表:

通過!session id 直接啟動新視窗並連線:

通過!exit退出。

連線後可遠端執行shell 命令:

1)部分ssh命令無法執行;

2)介面顯示太弱,需要改進。

Python編寫的ssh客戶端 類似putty

windows下可以通過putty以ssh方式連線linux主機。但putty也有一些問題 比如沒有儲存session,亂碼等等。偶然發現python也有ssh模組,學習的同時嘗試使用python編寫乙個類似putty的ssh客戶端。python2.7 pycrypto paramiko ecdsa...

Python編寫FTP客戶端

之前寫過一篇ftp服務端的文章,這篇介紹一下客戶端吧。在使用虛擬機器的時候,由於虛擬機器工具沒安裝成功,所以我決定用ftp在主機與虛擬機器之間傳送檔案,在虛擬機器上開啟ftp服務,然後把客戶端放在主機上,當然也可以顛倒過來。服務端請參考 python實現ftp伺服器 import ftplib im...

ssh客戶端的選擇

目前主流的ssh工具有 finalshell xshell securecrt。筆者之前用securecrt和xshell,最近一直在用finalshell,securecrt介面功能較多,但是是英文版,中文版漢化不全或存bug,讓我苦惱的是輸出內容太費眼了,行間距太窄且無法調節。xshell跟se...