簡體   English   中英

Subprocess.run 不適用於 ssh-copy-id

[英]Subprocess.run doesn't work on ssh-copy-id

我想使用 ssh-copy-id 自動將證書發送到遠程服務器。 我為此選擇了 python 子進程庫,但不知何故它不會將密碼發送到終端。

我知道我可以使用 sshpass 或 paramiko 來做到這一點,但除非必須,否則我不想選擇它。 你能幫我嗎? 我的代碼如下。

from subprocess import run,PIPE

send_cert = run(['ssh-copy-id', '-i', '~/.ssh/id_rsa.pub','pardus'], stdout=PIPE, input=input_cert, encoding='utf-8')
input_cert = '1'

pardus 是我的遠程主機的名稱。 您可以替換 user@IP。

在此處輸入圖像描述

~被 shell 替換為主目錄,但您不是通過 shell 執行命令,因此按字面解釋。

您可以使用os.path.expanduser() function 來執行此替換。

import os
from subprocess import run,PIPE

send_cert = run(['ssh-copy-id', '-i', os.path.expanduser('~/.ssh/id_rsa.pub'),'pardus'], stdout=PIPE, input=input_cert, encoding='utf-8')

我解決了。

    send_pass = 'PASSWORD' + '\n'
    send_cert = 'ssh-copy-id -i ' + 'CERT_PATH' + ' ' + 'USER@HOSTNAME'

    child = pexpect.spawn(send_cert,encoding='utf-8')
    child.expect('password:')
    child.sendline(send_pass)
    time.sleep(2)

謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM