通过ssh运行交互式Bash命令

时间:2012-11-02 20:56:03

标签: bash ssh chef

我正在尝试使用chef自动化我的服务器配置过程。由于我不想以root身份运行厨师,因此我需要一名厨师/部署人员。但我不想手动创建此用户。相反,我想自动化这一步。所以我开始编写脚本,但遇到了一个问题:

问题是如果我跑

>ssh root@123.345.345.567 '/bin/bash -e' < ./add_user.sh

其中add_user包含

//..if the username doesnt exist already
adduser $USERNAME --gecos ''

我从未看到命令的输出或提示。

  1. 有没有办法以这种方式运行交互式命令?
  2. 是否有更好的方式以自动方式添加用户?

2 个答案:

答案 0 :(得分:2)

试试这个:

ssh -t root@<ipaddress> adduser $USERNAME --gecos

不确定为什么原始示例中的IP地址中有$ - 这可能会导致ssh无法连接,但由于您没有指出那种失败,我假设这只是一个错字。

由于add_user.sh只是一个简单的命令,因此不需要显式运行bash或重定向的额外复杂性,只需通过adduser运行ssh命令即可​​。

最后,由于$USERNAME很可能是在本端定义的,而不是在远端定义的,即使你可以让你的原始命令“做你说的”,你最终也会运行{ {1}}在远程端,这不是你想要的。

答案 1 :(得分:0)

尝试使用:

ssh -t root@$123.345.345.567 '/bin/bash -e' < ./add_user.sh

代替。