如何在远程服务器上执行本地shell脚本?
我在本地机器上有一个shell脚本,我必须在远程服务器上执行该shell脚本。我已经完成了一些步骤如下:如何在远程服务器上执行本地shell脚本?
- 从本地机器和远程服务器配对的SSH密钥;
-
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帐户上的根?
您可以修改user_add.sh
,以便它可以与具有root权限的用户执行命令:
su $ROOT_USER -c "command arg1 arg2"
剧本是本地的;这没有帮助。 – 2012-07-31 11:11:05
实际上脚本'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
不会自动添加到/sbin
PATH
,你需要做手工:
(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]
您是否期望在运行时与'user_add.sh'进行交互?因为'stdin'已经被重定向了,所以这不起作用。 – Thor 2012-07-31 11:22:39