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

时间:2012-07-31 10:54:38

标签: bash shell

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

  1. 从本地计算机和远程服务器配对SSH密钥;
  2. ssh user@hostname 'bash - s' < user_add.sh;
  3. 我收到错误:

    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帐户的脚本?

3 个答案:

答案 0 :(得分:0)

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

su $ROOT_USER -c "command arg1 arg2"

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

嗯,这有点奇怪,你试图实现的目标,但你可以做到:

ssh user@hostname sudo -S < user_add.sh

user_add.sh中的命令将在hostname解释,并在sudo内运行。用户user必须在/etc/sudoers hostnameNOPASSWD声明)中有相应的条目。

如果您无法添加NOPASSWD,则需要以这种方式运行命令:

(echo PASSWORD; cat user_add.sh) | ssh user@hostname

您必须在user处写下hostname的密码,而不是PASSWORD。

如果您的sudo未自动将/sbin添加到PATH,则需要手动执行:

(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