2

我有一个 Python 脚本,用于sshpass对机器进行 ssh 访问

Popen(["sshpass","-p", "test!@#", "ssh", "-o UserKnownHostsFile=/dev/null", "-o StrictHostKeyChecking=no", "user1@192.168.10.1"])

但是由于密码字段中存在特殊字符,此命令会引发一些错误。有没有一种方法可以在 sshpass 中使用带有特殊字符的密码或可以从 Python 调用的任何其他内容?

错误是:bash: !@#": event not found

4

3 回答 3

3

转义字符在我的情况下有效。只需\在“!”之前使用字符 或其他特殊字符。

于 2016-04-22T08:35:58.710 回答
1

Python 不喜欢特殊字符。要么通过尾随转义符号,\要么使用原始字符串,如 in r"test!@#"

于 2014-09-29T15:39:47.337 回答
1

首先,sshpass与选项一起使用-p意味着您将密码发布给同一台机器上的任何人。这就像把你的房子钥匙放在你的地毯下。

错误消息来自用于执行上述命令的 shell(可能是 BASH)。该字符!被解释为特殊字符,意思是“在历史中查找我之后的文本”。

问题很可能出在sshpass脚本内部(因为您没有shell=True在 中指定Popen())。您可以尝试通过确保脚本使用正确的引用和转义来修复脚本。

另一种解决方案是通过env={'SSHPASS': 'test!@#'}toPopen()设置环境,sshpass手册页中所述

cmd = ['sshpass', '-e', 'ssh', '-o', 'UserKnownHostsFile=/dev/null', ...]
env = os.environ.copy()
env['SSHPASS'] = 'test!@#'
Popen(cmd, env=end)

注意:您应该将其拆分"-o key=value""-o", "key=value".

有关的:

于 2014-09-30T09:54:48.330 回答