Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在远程服务器上执行本地shell脚本?_Bash_Shell - Fatal编程技术网

Bash 如何在远程服务器上执行本地shell脚本?

Bash 如何在远程服务器上执行本地shell脚本?,bash,shell,Bash,Shell,我在本地机器中有一个shell脚本,我必须在远程服务器上执行该shell脚本。我已完成以下步骤: 来自本地机器和远程服务器的成对SSH密钥 sshuser@hostname“bash-s”

我在本地机器中有一个shell脚本,我必须在远程服务器上执行该shell脚本。我已完成以下步骤:

  • 来自本地机器和远程服务器的成对SSH密钥
  • sshuser@hostname“bash-s”
    我得到一个错误:

    standard in must be a tty
    : command not found
    bash: line 4: useradd: command not found
    Usage: /etc/init.d/vsftpd {start|stop|restart|condrestart|status}
    Only root can do that.
    chmod: cannot access `/102/prsuser\r': Permission denied
    mkdir: cannot create directory `/102/prov/\r': Permission denied
    bash: line 8: useradd: command not found
    Only root can do that.
    chmod: cannot access `/102/prov/PROV_LIS_RESP_DIR\r': Permission denied
    chown: cannot access `/102/prov/\r': Permission denied
    bash: line 12: /etc/vsftpd/chroot_list: Permission denied
    
    Root登录无法正常完成,我们可以通过
    su-command
    从普通用户帐户切换为Root登录


    因此,我的疑问是,如何在远程服务器上以root用户身份运行脚本,以及在我的脚本(user_add.sh)的起始点使用什么脚本切换root帐户?

    您可以修改
    user_add.sh
    ,以便它可以使用具有root权限的用户执行命令:

    su $ROOT_USER -c "command arg1 arg2"
    

    您可以使用sudo而不是su(并在sudoers文件中定义作为用户需要使用的所有命令)


    您还可以启用根帐户。作为旁注,该帐户不一定需要命名为“root”,您实际上可以创建一个新用户(命名为whatever),然后编辑passwd文件,并为该帐户分配一个uid值0。

    嗯,这有点奇怪,您尝试实现的是什么,但您可以做到:

    ssh user@hostname sudo -S < user_add.sh
    
    您必须在
    hostname
    处写入
    user
    的密码,而不是密码

    如果您的
    sudo
    没有自动将
    /sbin
    添加到
    路径
    ,则需要手动执行此操作:

    (echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \
    | ssh user@hostname 
    
    最后一件事。我注意到脚本中有
    \r
    符号(在Windows上编辑?)。最好删除它们:

    (echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \
    | tr -d '\r' \
    | ssh user@hostname 
    

    剧本是本地的;这没有帮助。实际上应该修改脚本
    user\u add.sh
    。本地或远程,脚本正在执行需要root权限的命令。您希望在脚本运行时与
    用户\u add.sh
    交互吗?因为
    stdin
    已经被重定向,所以这将不起作用。
    (echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \
    | tr -d '\r' \
    | ssh user@hostname