我想从单个主shell脚本运行2个不同的脚本。
第一个使用以下命令“rosh -n -l abcd”(它将使用用户abcd登录到服务器并且在同一个shell上我需要运行另一个script#2
和script#3
......等。)
脚本#2-从那里我需要使用su - xyz
更改用户并提供密码(如果我可以在文件中对其进行硬编码,则可以正常使用)(脚本名称为logintoServer)
脚本#3-在同一个shell中运行一些脚本以验证服务器停止的开始...
我做了以下但是失败了
我有一个脚本rosh -n <servername> -l abcd /bin/sh -c "su - xyz"
(我必须在同一个shell中运行此命令)
以下是错误:
答案 0 :(得分:0)
我没有rosh
,我没有rosh
的手册页,但ssh
存在类似的问题:
ssh localhost /bin/bash -c 'echo x' # (prints nothing)
ssh localhost "/bin/bash -c 'echo x'" # x
ssh localhost "/bin/bash -c 'tty'" # not a tty
ssh -t localhost "/bin/bash -c 'tty'" # /dev/pts/12\nConnection to localhost closed.
ssh localhost "/bin/bash -c 'su - $USER'" # su: must be run from a terminal
ssh -t localhost "/bin/bash -c 'su - $USER'"
最后一次要求输入密码然后给了我一个shell,所以这将是3个步骤中的2个。
因此,一个想法是查看rosh
是否也有-t选项,另一个想法是用引号括起/bin/bash...
(将需要一些转义为第3级)。
rosh
对等效命令的评价是什么?
<强>更新强> 最新状态:
rosh -n $host -l abcd -t "/bin/sh -c 'su - $user'"
接下来,我会通过/bin/su - xyz
代替/bin/sh -c 'su - xyz'
来保存一步,然后您可以稍后使用单引号,例如
rosh -n $host -l abcd -t "/bin/su - $user -c 'echo $PATH'"
这应该打印$ PATH,如echo命令所示。显然它不包含java。试试man su
,which java
,man which
。
su ... -c cmd
使用/ etc / passwd中指定的shell运行cmd,因此请在远程计算机上说</etc/passwd grep $user
以找出使用的shell。如果它是bash你可以改变.bashrc左右的$ PATH,对于我不确切知道的其他shell。
或者在启动java时指定绝对路径。
关于密码:使用ssh我设法使用私钥/公钥和ssh-agent
。对于rosh
,我不知道这是否有效。