【问题标题】:Shell Script automatically exits from SSH section after switching of user (through pbrun command)Shell Script 切换用户后自动退出 SSH 部分(通过 pbrun 命令)
【发布时间】:2014-10-07 01:00:09
【问题描述】:

我有下面的代码..

ssh some_user@server << EOF
echo 'Successfully connected to the server'
pbrun previlige -u user
ls
pwd
id
...few more commands
EOF
if [ $? -eq 0 ]
then
     echo 'Successful Execution of the last command in ssh'
fi

现在我在上面代码中遇到的问题是,通过pbrun命令切换用户后脚本自动退出(即它永远不会执行lspwd 和后续命令)。更复杂的是,这个问题是间歇性的。有时我得到所有后续命令的正确输出,有时却没有。

问题发生时的输出:

Successfully connected to the server 
su from some_user to user at Mon Oct 6 09:47:00  MDT 2014 
Successful Execution of the last command in ssh

在上述情况下,它在切换用户后从不显示命令的后续输出

问题未发生时的输出

Successfully connected to the server 
su from some_user to user at Mon Oct 6 09:47:00 MDT 2014 
Logs migrate.properties prereq.sh src_exp.sh src_mig.exp 
/home/venus/ 
uid=* gid=* groups=**** 
Successful Execution of the last command in ssh

这有什么原因/解决方法吗?即使是解决方法对我来说也应该没问题..!谢谢!

【问题讨论】:

    标签: bash shell ssh su


    【解决方案1】:

    传递内部heredoc 可确保您以后的内容被提供给pbrun 的标准输入,而不是仅在pbrun 退出后才在外壳中调用,否则会发生这种情况:

    ssh some_user@server <<'OUTER_EOF'
    echo 'Successfully connected to the server'
    pbrun -u user bash <<'INNER_EOF'
    # this is inside both ssh and pbrun
    ls
    pwd
    id
    INNER_EOF
    # this is inside ssh, but not inside pbrun
    OUTER_EOF
    

    【讨论】:

    • 您好查尔斯,感谢您的回复!我也用内部的heredoc厌倦了它......仍然没有运气。它在 pbrun 命令后自动退出。奇怪的是有时它会自动工作..根据您的建议修改代码.. === #!/bin/bash ssh viranka@rmhodtest03.oracle.com
    • 你会注意到我在外面写了&lt;&lt;'EOF',而不是&lt;&lt;EOF。区别很重要——它确保 heredoc 是按字面意思处理的,而不是执行扩展。
    • ...另外,告诉pbrun 调用bash 是重要且有意的——如果它将内部heredoc 的内容传递给除了shell 之外的任何东西的标准输入,则行为是未定义的。跨度>
    • 另外,它只是在换行符之后立即终止内部heredoc的INNER_EOF,而不是'INNER_EOF';引号是外壳的标志,而不是印记本身的一部分。
    • @user2928822, ...简而言之,请在尝试进行调整之前测试我提供的代码完全(除了调整用户名)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2017-08-15
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多