gpt4 book ai didi

python - 使用没有RSA key 的python ssh

转载 作者:太空狗 更新时间:2023-10-30 01:09:44 26 4
gpt4 key购买 nike

Stackoverflow 的新手,所以首先,你好。

我正在为我的学校做一个小项目,它应该是一个自定义图形用户界面(用 python 编写,对我来说是一个教育挑战,因为我从未使用过 python)用于开源 Unison 程序。我们试图通过以尽可能少的输入启动该程序(如果您愿意,可以防止白痴)来允许学生和教职员工同步家庭和学校的文件夹。该界面应该只是他们的学校用户名和密码,gui 包装器应该只将用户名和密码发送到 Unison 并同步它们。

问题是 Unison 依次启动 SSh 并提示输入密码,但 python subprocess.communicate(input) 方法不会让 ssh 获取密码。我意识到 ssh 只会接受来自终端的输入,但我不知道如何欺骗它。我已经阅读了一些关于使用伪终端的内容,但我仍然感到困惑。 RSA key 将是理想的解决方案,但生成它们然后将它们放在远程服务器上仍然需要我至少使用密码登录一次,这将需要解决上述问题,或者终端不是白痴证明。

def startSync(self):
'''
'''
userName = self.userNameIn.get()
userPass = self.userPassIn.get()
localDir = "/Users/localuser/syncFolder/"
remoteDir = " ssh://schoolServer/remotesyncFolder" #for testing purposes, I set this to my own home machine which logs into my own account if I don't provide me@myserver.net
unisonExecRemotePath = " -servercmd /Users/RemoteMe/unison" #unison is the unix executable responsible for launching unison on the remote system
silenceCmdPrompts = " -silent" #keeps unison from displaying directory differences and asking if its okay to sync
executionString = "./unison" + localDir + remoteDir + unisonExecRemotePath + silenceCmdPrompts

mainProcess = subprocess.Popen(executionString,shell = True, stdin = subprocess.PIPE)
mainProcess.communicate(userPass)

如果我将执行字符串粘贴到那里,则执行字符串在终端中工作正常。如果您愿意,任何通用的 python 提示也将不胜感激。

谢谢!

Unison 用户手册:http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html

编辑:我还应该指出,虽然我目前正在 OSX 和 Linux 下进行开发,但我最终必须使此 Windows 兼容,因为我学校的大多数学生都将 Windows 作为他们的主要(或唯一)机器运行。

最佳答案

查看pexpect .

import pexpect

child = pexpect.spawn('ssh myname@host.example.com')
child.expect('Password:')
child.sendline(mypassword)
child.interact()

关于python - 使用没有RSA key 的python ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com