2011-04-09 55 views
0

阅读我想写一个shell脚本,它类似于下面的从shell脚本内傻瓜程序运行以为它是从一个终端

while read line; do 
echo $line 
done<input.txt | ssh > output.txt 

这是目前有点假的codeY (原文在工作),但你应该能够说出它在做什么。对于简单的应用程序来说,这是一种享受,但ssh会检查输入以查看它的stdin是否是终端。

有没有办法欺骗ssh认为我的管道回路的内容是终端而不是管道?

编辑:对不起,不最初加入这个,这是为了让SSH通过shell脚本登录(回答密码提示)

+0

冷静下来,不要以为我没有意识到这一点。这是当前的方法,但是要将密钥放在服务器上,它仍然需要提示一次输入密码。 – linead 2011-04-10 00:33:24

+0

首先,**你**只是编辑你的问题,说你需要一些虚假的键盘登录。我做了**不是那样**。如果你想颠覆这一点,让你的密钥在某些服务器上,那么就没有安全密钥了。顺便说一句,将用一个更有帮助的提示更新我的答案。 – sehe 2011-04-10 00:36:07

+1

如果它的ssh - 你不能创建一个符合shh的'SSH_ASKPASS' env var?的脚本吗? (SSH(1))。只是一个想法,没有尝试 – nhed 2011-04-10 01:02:51

回答

2

更新

这个问题(更新你的问题和各种意见后,很明显你正在寻找一种方式来方便地获取公共密钥加密到位)或许可以通过“思维倒挂”来解决。

您可以尝试从服务器接收经过身份验证的身份(私钥),而不是非常努力地将您的客户公钥导入尚未验证客户端的服务器上。

简单的术语:在服务器上而不是客户端上生成密钥对,然后找到一种方法来获取客户端上的密钥对。服务器可以提前将公钥置于其authorized_keys中,以便客户端可以立即连接。

机会是

  • 的拿到钥匙跨越更容易解决了这个问题(你甚至可以使用“群组”键从不同的客户端访问)
  • 如果安全性较低的机制选择(方便而不是安全)至少只有客户端的安全性降低了,而不是服务器(直接)的安全性。

原来的答复:

简短的回答:不。 (这将是ssh的安全漏洞,因为ssh'信任'tty输入密码,而tty只是)

长的答案,你可以尝试颠覆/创造性地使用终端模拟器(看脚本/ scriptreplay为灵感)。

你为什么要这样做?

+0

我不明白这是一个安全漏洞,我可以例如使用一个密钥,然后不需要密码并一次一个地传递我的命令。 – linead 2011-04-10 00:21:57

+0

那么,你清楚地表明,另一个app_(**不是ssh **)需要一个tty。谨慎阐述? – sehe 2011-04-10 00:31:38

+0

对不起,这个问题应该更好。感谢您的回答,我将着眼于创造性地使用终端仿真器,因为目标和目标都是可以互换的。我确实意识到这整个事情听起来有多疯狂;) – linead 2011-04-10 00:58:06

3

ssh -t -t会做你想要的东西 - 这告诉ssh来分配伪终端无论它是否真的在一个运行。

+0

伪终端不会被分配,因为stdin不是终端 – sehe 2011-04-10 00:06:42

+0

@sehe:-t是“强制伪分配”。 – Erik 2011-04-10 00:07:59

+0

试试看:'echo hello | ssh -t localhost cat' – sehe 2011-04-10 00:10:57

相关问题