python ssh登入 python ssh連線

2021-10-11 11:55:44 字數 3572 閱讀 7786

pip install paramiko

檢視並啟動ssh服務

service ssh status

新增使用者:

useradd -d /home/zet zet

passwd zet

賦予ssh許可權

vi /etc/ssh/sshd_config

新增allowusers:zet

客戶端**

#-*- coding:utf8 -*-

import threading

import paramiko

import subprocess

def ssh_command(ip, user, passwd, command, port = 22):

client = paramiko.sshclient()

client.set_missing_host_key_policy(paramiko.autoaddpolicy())    #設定自動新增和儲存目標ssh伺服器的ssh金鑰

client.connect(ip, port, username=user, password=passwd)  #連線

ssh_session = client.get_transport().open_session() #開啟會話

if ssh_session.active:

ssh_session.send(command)   #傳送command這個字串,並不是執行命令

print ssh_session.recv(1024)    #返回命令執行結果(1024個字元)

while true:

command = ssh_session.recv(1024)    #從ssh伺服器獲取命令

try:

cmd_output = subprocess.check_output(command, shell=true)

ssh_session.send(cmd_output)

except exception, e:

ssh_session.send(str(e))

client.close()

return

ssh_command('127.0.0.1', 'zet', 'zet', 'clientconnected',8001)

服務端**

#-*- coding:utf8 -*-

import socket

import paramiko

import threading

import sys

# 使用 paramiko示例檔案的金鑰

#host_key = paramiko.rsakey(filename='test_rsa.key')

host_key = paramiko.rsakey(filename='/root/.ssh/id_rsa')

class server(paramiko.serverinte***ce):

def __init__(self):

self.event = threading.event()

def check_channel_request(self, kind, chanid):

if kind == 'session':

return paramiko.open_succeeded

return paramiko.open_failed_administratively_prohibited

def check_auth_password(self, username, password):

if (username == 'qing') and (password == 'qing'):

return paramiko.auth_successful

return paramiko.auth_failed

server = sys.ar**[1]

ssh_port = int(sys.ar**[2])

try:

sock = socket.socket(socket.af_inet, socket.sock_stream)    #tcp socket

#這裡value設定為1,表示將so_reuseaddr標記為true,作業系統會在伺服器socket被關閉或伺服器程序終止後馬上釋放該伺服器的埠,否則作業系統會保留幾分鐘該埠。

sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

sock.bind(('127.0.0.1', 8001))   #繫結ip和埠

sock.listen(100)    #最大連線數為100

print '[+] listening for connection ...'

client, addr = sock.accept()

except exception, e:

print '[-] listen failed: ' + str(e)

sys.exit(1)

print '[+] got a connection!'

try:

bhsession = paramiko.transport(client)

bhsession.add_server_key(host_key)

server = server()

try:

bhsession.start_server(server=server)

except paramiko.sshexception, x:

print '[-] ssh negotiation failed'

chan = bhsession.accept(20) #設定超時值為20

print '[+] authenticated!'

print chan.recv(1024)

chan.send("welcome to bh_ssh")

while true:

try:

command = raw_input("enter command:").strip("\n")   #strip移除字串頭尾指定的字元(預設為空格),這裡是換行

if command != 'exit':

chan.send(command)

print chan.recv(1024) + '\n'

else:

chan.send('exit')

print 'exiting'

bhsession.close()

raise exception('exit')

except keyboardinterrupt:

bhsession.close()

except exception, e:

print '[-] caught exception: ' + str(e)

try:

bhsession.close()

except:

pass

sys.exit(1)

服務端必須建立bh_sshserver.py檔案:

利用ssh-keygen -t rsa 命令建立金鑰檔案/root/.ssh/id_rsa,

python ssh工具paramiko的一點修改

經常使用paramiko工具對幾百台裝置進行管理。主要是每天到上邊取檔案過來,作為備份。今天發現程式執行了10個小時還沒有結束,就上去看乙個究竟。檢視日誌,發現在取一台伺服器上的檔案時卡在那裡了。自己手動ssh登入上去,執行了乙個ls命令就卡住了,原來是這個伺服器的硬碟出問題了。怪不得取不到檔案。但...

python SSH連線工具類

import os import paramiko class sshconnectionutils hostname port 22 username password ssh def init self,hostname,port,username,password self.hostname ...

python ssh之paramiko模組使用

1.安裝 sudo pip install paramiko 2.連線到linux伺服器 方法一 paramiko.util.log to file ssh.log 寫日誌檔案 client paramiko.sshclient client.set missing host key policy ...