从shell脚本内傻瓜程序运行以为它是从一个终端
问题描述:
阅读我想写一个shell脚本,它类似于下面的从shell脚本内傻瓜程序运行以为它是从一个终端
while read line; do
echo $line
done<input.txt | ssh > output.txt
这是目前有点假的codeY (原文在工作),但你应该能够说出它在做什么。对于简单的应用程序来说,这是一种享受,但ssh会检查输入以查看它的stdin是否是终端。
有没有办法欺骗ssh认为我的管道回路的内容是终端而不是管道?
编辑:对不起,不最初加入这个,这是为了让SSH通过shell脚本登录(回答密码提示)
答
更新
这个问题(更新你的问题和各种意见后,很明显你正在寻找一种方式来方便地获取公共密钥加密到位)或许可以通过“思维倒挂”来解决。
您可以尝试从服务器接收经过身份验证的身份(私钥),而不是非常努力地将您的客户公钥导入尚未验证客户端的服务器上。
简单的术语:在服务器上而不是客户端上生成密钥对,然后找到一种方法来获取客户端上的密钥对。服务器可以提前将公钥置于其authorized_keys中,以便客户端可以立即连接。
机会是
- 的拿到钥匙跨越更容易解决了这个问题(你甚至可以使用“群组”键从不同的客户端访问)
- 如果安全性较低的机制选择(方便而不是安全)至少只有客户端的安全性降低了,而不是服务器(直接)的安全性。
原来的答复:
简短的回答:不。 (这将是ssh的安全漏洞,因为ssh'信任'tty输入密码,而tty只是)
长的答案,你可以尝试颠覆/创造性地使用终端模拟器(看脚本/ scriptreplay为灵感)。
你为什么要这样做?
冷静下来,不要以为我没有意识到这一点。这是当前的方法,但是要将密钥放在服务器上,它仍然需要提示一次输入密码。 – linead 2011-04-10 00:33:24
首先,**你**只是编辑你的问题,说你需要一些虚假的键盘登录。我做了**不是那样**。如果你想颠覆这一点,让你的密钥在某些服务器上,那么就没有安全密钥了。顺便说一句,将用一个更有帮助的提示更新我的答案。 – sehe 2011-04-10 00:36:07
如果它的ssh - 你不能创建一个符合shh的'SSH_ASKPASS' env var?的脚本吗? (SSH(1))。只是一个想法,没有尝试 – nhed 2011-04-10 01:02:51