我使用pexpect与服务器建立ssh连接。服务器的登录shell不是bash。我想用一个连接执行多个命令。我尝试过sendline(),但它并没有把它作为一个命令来处理它只是输入文本。所以也许我需要一种方式发送"输入"通过pexpect发出信号。 下一个用例是从某些目录执行命令,所以我首先必须去那里执行命令。 有没有办法做到这一点?或者有没有更好的方法通过密码验证在远程服务器上执行多个命令?
答案 0 :(得分:2)
解决此问题的一种方法是首先启动bash,然后运行命令。要记住的一件事是,在发送每个命令后调用child.expect是件好事。下面是如何连接到服务器然后运行ls的示例。琐碎但是希望是有帮助的。对于像'cd'这样的命令,您应该只能期望并清空字符串,因为通常没有输出
import pexpect
import sys
child = pexpect.spawn("bash")
child.logfile = sys.stdout
child.sendline("ssh user@hostname")
child.expect("Some string to match")
child.sendline("ls")
child.expect("Some directory or file")
child.sendline("cd /path/to/file/or/directory")
child.expect("")
child.sendline("ls")
child.expect("A certain filename")
当您运行ssh命令时,您也可以执行类似
的操作ssh -t user@hostname 'cd /path/to/directory'
当你的ssh连接开始时,你将直接进入目录