Bash 如何在远程服务器上执行本地shell脚本?
我在本地机器中有一个shell脚本,我必须在远程服务器上执行该shell脚本。我已完成以下步骤:Bash 如何在远程服务器上执行本地shell脚本?,bash,shell,Bash,Shell,我在本地机器中有一个shell脚本,我必须在远程服务器上执行该shell脚本。我已完成以下步骤: 来自本地机器和远程服务器的成对SSH密钥 sshuser@hostname“bash-s”
sshuser@hostname“bash-s”
李>
我得到一个错误:
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帐户?您可以修改
user_add.sh
,以便它可以使用具有root权限的用户执行命令:
su $ROOT_USER -c "command arg1 arg2"
您可以使用sudo而不是su(并在sudoers文件中定义作为用户需要使用的所有命令)
您还可以启用根帐户。作为旁注,该帐户不一定需要命名为“root”,您实际上可以创建一个新用户(命名为whatever),然后编辑passwd文件,并为该帐户分配一个uid值0。嗯,这有点奇怪,您尝试实现的是什么,但您可以做到:
ssh user@hostname sudo -S < user_add.sh
您必须在hostname
处写入user
的密码,而不是密码
如果您的sudo
没有自动将/sbin
添加到路径
,则需要手动执行此操作:
(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
剧本是本地的;这没有帮助。实际上应该修改脚本
user\u add.sh
。本地或远程,脚本正在执行需要root权限的命令。您希望在脚本运行时与用户\u add.sh
交互吗?因为stdin
已经被重定向,所以这将不起作用。
(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \
| tr -d '\r' \
| ssh user@hostname