让 ssh 从 stdin 读取密码

发布于 2023-02-05 00:18:16 字数 954 浏览 135 评论 0

执行像 ssh、scp 这类 secure command 时,必须手工输入密码,而且它们是直接从 /dev/tty 而不是 stdin 中读取密码的,这也意味着无法通过重定向 IO 的方式传送密码給这些程序,查了一下网上一般的解决方案是借助 paramikopexpect 这两个第三方库来解决的。

但安装第三方库对于不能随意访问互联网的环境来说是很麻烦的一件事情。

其实就这个应用场景来说,完全没必要用到第三方库,python 自带一个名为 pty 的 modual,它有一个 spawn 函数,manual 中对它的描述是:

pty.spawn(argv[, master_read[, stdin_read]])

Spawn a process, and connect its controlling terminal with the current process’s standard io. This is often used to baffle programs which insist on reading from the controlling terminal.

这就好办了,我们只要创建一个名为 pty-process.py 脚本,在这个脚本中用 pty.spawn 调用 secure command,然后再通过写入该脚本 stdin 的方式就可以变相地給这些 secure command 发送密码了。

pty-process.py 脚本的实现如下:

#!/bin/env python3
import pty
import sys

pty.spawn(sys.argv[1:])

借助于这个 pty-process.py 我们可以这样执行 secure command 了

echo $passwd |pty-process.py ssh $usr@$remote $command

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

笑红尘

暂无简介

文章
评论
737 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文