[英]How to execute local shell script on remote servers?
我的本地计算机上有一个Shell脚本,我必须在远程服务器上执行该Shell脚本。 我已经完成了一些步骤,如下所示:
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登录,我们可以通过su - command
从普通用户帐户切换为root用户登录。
因此,这是我的疑问,如何在远程服务器上以根用户身份运行脚本,以及在脚本(user_add.sh)的起始点使用哪个脚本来切换根帐户?
您可以修改user_add.sh
以便它可以对具有root特权的用户执行命令:
su $ROOT_USER -c "command arg1 arg2"
您可以使用sudo而不是su(并在sudoers文件中定义需要作为用户使用的所有命令)
您也可以启用根帐户。 附带说明,该帐户不一定需要命名为“ root”,您实际上可以创建一个新用户(命名为任何名称),然后编辑passwd文件并为该帐户分配uid值0。
好吧,您尝试实现的目标有点奇怪,但是您可以做到:
ssh user@hostname sudo -S < user_add.sh
user_add.sh
的命令将以hostname
解释,并在sudo
运行。 用户user
必须在hostname
/etc/sudoers
中具有对应的条目(带有NOPASSWD
语句)。
如果您不能添加NOPASSWD
,则需要以这种方式运行命令:
(echo PASSWORD; cat user_add.sh) | ssh user@hostname
您必须在hostname
上输入user
密码,而不是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.