解決 window 上python遠程執行shell paramiko 命令 Permission denied


1. 如果程序是在 Linux遠程執行 , 那么遇到某些命令是不需要 再輸入密碼的

  但如果 python 是在本地 , 用  paramiko包 遠程ssh登錄執行命令 , 就會遇到需要輸入密碼

 

2.解決辦法 , 在windows上面  ssh-keygen -t rsa -C "abby@192.168.1.100" ,  公鑰的作用域是遠程 IP用戶名 為'abby'

             創建window 自己的公鑰 , 其實相當於自己的指紋.

把這個指紋 , 復制到遠程 Linux的 公鑰存放點

(在window的公鑰文件夾下執行復制命令 , 注意遠程Linux里面根目錄   ~ 代表的是用戶 , /dir 代表的是 root的根目錄

scp ./id_rsa.pub abby@192.168.1.11:~/.ssh/windows_ras.pub       我這里是復制到用戶.ssh里面 

 

 

 這個命令就是查看你復制到Linux的RSA 公鑰並且寫入到 Linux已確認免密登錄公鑰的文件中 , 他自己會創建 , 這樣就可以window免密登錄了 

使用python的 ssh 功能就不用輸入密碼 ,我指的是啟動某些命令需要

 cat windows_ras.pub >> authorized_keys             

 

 

 

注意: scp 復制到Linux的 /  和~/  不是同一位置哦 , / 是root的免密 . ~/是 user的免密(說了兩遍)

 

Final: 貼上我 用python 上的 paramiko 包 遠程 啟動 hadoop實例 .以前是能登陸進去,但是執行命令會報要輸入密碼 ,

  另外,執行命令需要輸入完整的路徑名

# -*- coding: utf-8 -*-
# 批量操作linux服務器(執行命令,上傳,下載)
# !/usr/bin/python
import paramiko
import threading


def ssh2(ip, username, passwd, cmd):
    try:
        paramiko.util.log_to_file('paramiko________.log')
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip, 22, username, passwd, timeout=5)

        stdin, stdout, stderr = ssh.exec_command(cmd)

        out = stdout.readlines()
        # outerr = stderr.readlines()
        # 屏幕輸出
        print('執行完畢')
        for o in out:
            print(o),

            print('%s\tOK\n' % (ip))
        ssh.close()
    except:
        print('%s\tError\n' % (ip))


if __name__ == '__main__':
    #  cmd = ['ls -lh /export/servers/mysql/log/mysql.log']#你要執行的命令列表
    # 從文件讀取命令

    cmd = "/home/abby/module/hadoop-2.6.0-cdh5.15.0/sbin/start-dfs.sh;"
    print("執行命令: ", cmd)

    username = "abby"  # 用戶名  你是免密給哪個用戶的 ,哪個用戶才有權利不用 密碼接待外賓
    passwd = "1"  # 單台服務器時啟用----------------------
    ip = '192.168.1.11'  # 單台服務器時啟用----------------------

    a = threading.Thread(target=ssh2, args=(ip, username, passwd, cmd))
    a.start()

 


 

PS:  我們把window的 公鑰比喻成一個客戶 , 秘鑰上傳比作 行賄 , 你傳給誰的  , 那么誰才能為你 開門 ,scp 的位置 , 作用的用戶 就是你行賄的對象 

  你不能用行賄給 abby  , 開門卻去找 root , 那樣還是需要密碼的 , 就算你把大門打開 , 核心通道你還是進不去 ,就像這里我行賄給 abby ,我用root 去登錄 ,

  能登進去 , 但執行需要認證的命令肯定失敗.

  所以我用 abby 登錄上還是可以的 ,就算 root 的權限比abby 高也不行 . 我執行了   關閉 hadoop的命令 並且返回了 .

  通過這個 . . . 這也能執行一些腳本的 .反正不需要輸密碼 .

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM