0

我的本地机器上有一个 shell 脚本,我必须在远程服务器上执行那个 shell 脚本。我做了一些步骤如下:

  1. 来自本地机器和远程服务器的配对 SSH 密钥;
  2. ssh user@hostname 'bash - s' < user_add.sh;

我收到一个错误:

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 登录是不能正常进行的,我们可以通过从普通用户帐户切换为 root 登录su - command

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

4

3 回答 3

0

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

su $ROOT_USER -c "command arg1 arg2"
于 2012-07-31T11:10:17.727 回答
0

好吧,这有点奇怪,您尝试实现的目标,但您可以做到:

ssh user@hostname sudo -S < user_add.sh

中的命令user_add.sh将在 中解释并在 中hostname运行sudo。用户user必须在/etc/sudoersat hostname(withNOPASSWD语句)中有相应的条目。

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

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

而不是 PASSWORD 你必须写密码userat hostname

如果您sudo没有自动添加/sbinPATH则需要手动添加:

(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 
于 2012-07-31T19:55:27.290 回答
0

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

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

于 2012-07-31T11:27:29.893 回答