iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Security

為駭而生 - Python 系列 第 18

Day 18 - SSH with Paramiko I

  • 分享至 

  • xImage
  •  

This series of tutorials is aimed to share the notes taken while I was learning python for cybersecurity with the books - Black Hat Python.
這系列教學文章為學習筆記+延伸資源,旨在分享學習書籍 Black Hat Python時所思所學,也希望能幫助想了解Python和資安的大大們入門。

This tutorail has also been written in English in Medium.

目錄

  • SSH with Paramiko I

看文前, 你應該要具備以下基礎能力:


Let's get started! 開始吧!


SSH with Paramiko I

SSH with Paramiko

  • 加密交通,以避免被偵測到,是聰明的做法
  • 領頭地位的內建 Python SSHv2 protocol library

如何實作 How to do it?

  • 常見作法之一:使用Secure Shell(SSH)在交通使用隧道(to tunnel the traffic)

如果沒有SSH?

  • PuTTY 是Windows系統中好用的SSH客戶端
  • 在 Python, 裸sockets和一些加密魔法會幫助我們建立屬於我們自己的SSH客戶端或伺服器。

所以到底為什麼是Paramiko?

  • 他能被重複使用
  • 使用PyCrypto 讓我們能輕易進入SSH2 protocol.

0.

安裝 paramiko

pip  install paramiko

建一個檔案叫ssh_cmd.py

1.


# ssh_cmd.py
import paramiko
def ssh_command(ip, port, passwd, cmd):
    client = paramiko.SSHClient()

  • ssh_cmd函式建立了一個連結到SSH伺服器,並跑一行指令
  • Paramiko 支援有金鑰的驗證,讓我們不需要使用密碼驗證
  • 為了範例的簡單性,這裡會使用傳統使用者和密碼驗證方式

2.

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(ip, port=port, username=user, password=passwd)
  • 我們控制連結的兩端,所以我們設定了政策(policy)以便接受SSH金鑰,從而連接到SSH伺服器並建立連結。
    (We are controlling both ends of this connection, so we set the policy to accept the SSH key for the SSH server we're connecting to and make the connection.)

3.

_, stdout, stderr = client.exec_command(cmd)
    output = stdout.readlines() + stderr.readlines()
    if output:
        for line in output:
            print(line.strip())
  • 現在我們跑了在呼叫中傳送的指令,到ssh_command函式(Now we run the command to pass in the call to the ssh_command function)
  • 如果指令產生輸出結果,我們輸出輸出結果的每一行(If the command produced output, we print each line of the output)

4.


if __name__ == '__main__':
    import getpass
    user = input('Username: ')
    password = getpass.getpass()
    ip = input('Enter server IP: ') or '192.168.1.203'
    port = input('Enter port or <CR>: ') or 2222
    cmd = input('Enter command or <CR>: ') or 'id'

  • 建立了新的module getpass
  • 可以用來得到目前環境中的使用者名稱
  • 但因為我們在兩台電腦有不同的使用者名稱,所以我們必須直接在command line詢問使用者名稱

5.

ssh_command(ip, port, user, password, cmd)

現在我們傳送以便執行。



Reference參考資料

推薦影片
絕讚! Youtube 教學影片 | Elevate Cyber

原始碼
Github - Python For Cybersecurity | Monles


上一篇
Day 17 - Proxy VIII
系列文
為駭而生 - Python 18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言