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

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

问题描述:

我在本地机器上有一个shell脚本,我必须在远程服务器上执行该shell脚本。我已经完成了一些步骤如下:如何在远程服务器上执行本地shell脚本?

  1. 从本地机器和远程服务器配对的SSH密钥;
  2. ssh [email protected] '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 

超级用户登录时无法正常完成,我们可以通过su - command从普通用户帐户切换为root登录。

因此,这里是我的疑问,如何运行脚本远程服务器,什么脚本用于在我的脚本(user_add.sh)内的起点切换root帐户上的根?

+0

您是否期望在运行时与'user_add.sh'进行交互?因为'stdin'已经被重定向了,所以这不起作用。 – Thor 2012-07-31 11:22:39

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

su $ROOT_USER -c "command arg1 arg2" 
+0

剧本是本地的;这没有帮助。 – 2012-07-31 11:11:05

+0

实际上脚本'user_add.sh'应该被修改。本地或远程,脚本正在执行需要root权限的命令。 – aayoubi 2012-07-31 11:50:43

你可以使用sudo,而不是苏(并确定你需要在你的用户使用的所有命令sudoers文件)

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

嗯,这是一个有点怪,你努力实现,但你可以做到这一点:

ssh [email protected] sudo -S < user_add.sh 

是在user_add.sh将在hostname解释和内sudo运行的命令。用户user必须在hostname(与NOPASSWD语句)在/etc/sudoers记者进入。

如果您不能添加NOPASSWD你需要运行的命令是这样的:

(echo PASSWORD; cat user_add.sh) | ssh [email protected] 

代替密码,你必须在hostname写的user密码。

如果您sudo不会自动添加到/sbinPATH,你需要做手工:

(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \ 
| ssh [email protected] 

而最后一件事。我注意到您的脚本中有\r符号(在Windows上编辑?)。最好删除它们:

(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \ 
| tr -d '\r' \ 
| ssh [email protected]