愚弄从shell脚本中运行的程序,认为它是从终端读取的

时间:2011-04-09 23:58:30

标签: bash ssh sh

我想写一个shell脚本,它执行类似下面的操作

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

目前这有点伪代码(原作是在工作),但你应该能够分辨出它在做什么。对于简单的应用程序,这可以解决问题,但是ssh检查输入以查看它的标准输入是否是终端。

有没有办法让ssh认为我的管道循环的内容是终端而不是管道?

编辑:抱歉没有最初添加此内容,这是为了允许ssh通过shell脚本登录(回答密码提示)

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

<强>更新

这个问题(更新你的问题和各种评论后,很明显你正在寻找一种方便地将公钥加密到位的方法)也许可以通过“颠倒思考”来解决。

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

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

可能是

  • 更容易解决获取密钥的问题(您甚至可以使用“组”密钥从各种客户端访问)
  • 如果选择安全性较低的机制(安全性方便),至少只降低客户端的安全性,而不是服务器的安全性(直接)。

原始答案:

简短回答:不。 (这对于ssh来说是一个安全漏洞,因为ssh'信任'密码输入的tty,而且仅限tty)

答案很长,您可以尝试颠覆/创造性地使用终端模拟器(查看脚本/ scriptreplay获取灵感)。

你为什么要这样做?