ssh客戶端實現方案一,遠端執行命令(密碼認證)
# -*- coding:utf-8 -*-import paramiko # 先安裝pycrypto,再安裝paramiko
# 建立ssh物件
ssh = paramiko.sshclient()
# 允許連線不在~/.ssh/known_hosts檔案中的主機
ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())
# 連線伺服器
ssh.connect(hostname="106.15.88.182", port=22, username="root", password="123456")
# 執行命令,不要執行top之類的在不停的重新整理的命令(可以執行多條命令,以分號來分隔多條命令)
# stdin, stdout, stderr = ssh.exec_command("cd %s;mkdir %s" % ("/www/wwwroot", "aa"))
stdin, stdout, stderr = ssh.exec_command("python /www/wwwroot/test.py")
stdin.write("終端等待輸入...\n") # test.py檔案有input()函式,如果不需要與終端互動,則不寫這兩行
stdin.flush()
# 獲取命令結果
res, err = stdout.read(), stderr.read()
result = res if res else err
res = result.decode()
res = result.decode("utf-8")
res = result.decode(encoding="utf-8")
print res
# 關閉伺服器連線
ssh.close()
ssh客戶端實現方案二,遠端執行命令(密碼認證)
import paramikotransport = paramiko.transport(("106.15.88.182", 22))
transport.connect(username="root", password="123456") # 建立連線
# transport.connect(username="root", password="口令", hostkey="金鑰")
# 建立ssh物件,sshclient是定義怎麼傳輸命令、怎麼互動檔案
ssh = paramiko.sshclient()
ssh._transport = transport
# 執行命令,不要執行top之類的在不停的重新整理的命令
stdin, stdout, stderr = ssh.exec_command("df")
# 獲取命令結果
res, err = stdout.read(), stderr.read()
result = res if res else err
print result.decode()
# 關閉伺服器連線
transport.close()
ssh客戶端實現方案三,遠端執行命令(密碼認證)
import paramikoclient = paramiko.sshclient() # 建立ssh物件
client.set_missing_host_key_policy(paramiko.autoaddpolicy())# 允許連線不在known_hosts檔案中的主機
# 連線伺服器,以使用者名稱和密碼進行認證
client.connect(hostname="106.15.88.182", port=22, username="root", password="123456")
#例項化transport,並建立會話session
ssh_session = client.get_transport().open_session()
if ssh_session.active:
ssh_session.exec_command("df")
print ssh_session.recv(1024)
# 關閉伺服器連線
client.close()
ssh客戶端實現方案四,遠端執行命令(金鑰認證)
import paramikossh = paramiko.sshclient() # 建立ssh物件
ssh.set_missing_host_key_policy(paramiko.autoaddpolicy()) # 允許連線不在know_hosts檔案中的主機
#這裡寫我們的金鑰檔案
private_key = paramiko.rsakey.from_private_key_file("key.poem")
# 連線伺服器,這裡我們用pkey引數設定為私鑰登陸
ssh.connect(hostname="106.15.88.182", port=22, username="root", pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('df') # 執行命令
res, err = stdout.read(), stderr.read() # stdout.readline()
result = res if res else err
print result.decode()
ssh.close() # 關閉連線
封裝之後的使用
import sys,loggingfrom paramiko.client import sshclient, autoaddpolicy
from paramiko import authenticationexception
from paramiko.ssh_exception import novalidconnectionserror
class sshclient():
def __init__(self):
self.ssh_client = sshclient()
def ssh_login(self, host_ip, username, password):
try:
# 設定允許連線known_hosts檔案中的主機(預設連線不在known_hosts檔案中的主機會拒絕連線丟擲sshexception)
self.ssh_client.set_missing_host_key_policy(autoaddpolicy())
self.ssh_client.connect(host_ip, port=22, username=username, password=password)
except authenticationexception:
logging.warning('username or password error')
return 1001
except novalidconnectionserror:
logging.warning('connect time out')
return 1002
except:
print("unexpected error:", sys.exc_info()[0])
return 1003
return 1000
def execute_some_command(self, command):
stdin, stdout, stderr = self.ssh_client.exec_command(command)
print stdout.read().decode()
def ssh_logout(self):
self.ssh_client.close()
if __name__ == "__main__":
command = "whoami" # 自己使用ssh時,命令怎麼敲的command引數就怎麼寫
ssh = sshclient()
if ssh.ssh_login(host_ip="106.15.88.188", username="root", password="abc0506") == 1000:
ssh.execute_some_command(command)
ssh.ssh_logout()
ssh客戶端的選擇
目前主流的ssh工具有 finalshell xshell securecrt。筆者之前用securecrt和xshell,最近一直在用finalshell,securecrt介面功能較多,但是是英文版,中文版漢化不全或存bug,讓我苦惱的是輸出內容太費眼了,行間距太窄且無法調節。xshell跟se...
幾款SSH客戶端
securecrt xshell putty等都僅僅是客戶端軟體,一般用於windows客戶端計算機,因此,無論選擇哪款客戶端ssh工具都是可以的。1 securecrt 8.1版本 securecrt是一款支援ssh ssh1和ssh2 協議的終端 軟體,常被用來執行於windows下遠端登入un...
ssh客戶端簡單使用
secure shell,只是一種協議,實現它的軟體有很多,我們常用的開源又免費的軟體叫openssh,分為客戶端和服務端。不是運維,服務端我沒搞過,所以這裡只講客戶端用法,大部分程式設計師應該只要知道客戶端使用就好了。安裝openssh clients,然後就可以通過ssh agent連線遠端伺服...