如何解决Subprocess.run在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()
函数执行此替换。
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)
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。