[英]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.