我的本地计算机上有一个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用户。
所以我怀疑,如何在远程服务器上以root身份运行脚本,以及在脚本(user_add.sh)的起始位置用于切换root帐户的脚本?
答案 0 :(得分:0)
您可以修改user_add.sh
,以便它可以与具有root权限的用户执行命令:
su $ROOT_USER -c "command arg1 arg2"
答案 1 :(得分:0)
您可以使用sudo而不是su(并在sudoers文件中定义您需要用作用户的所有命令)
您还可以启用root帐户。作为旁注,该帐户不一定需要命名为“root”,您实际上可以创建一个新用户(命名为what),然后编辑passwd文件并为该帐户指定uid值为0。
答案 2 :(得分:0)
嗯,这有点奇怪,你试图实现的目标,但你可以做到:
ssh user@hostname sudo -S < user_add.sh
user_add.sh
中的命令将在hostname
解释,并在sudo
内运行。用户user
必须在/etc/sudoers
hostname
(NOPASSWD
声明)中有相应的条目。
如果您无法添加NOPASSWD
,则需要以这种方式运行命令:
(echo PASSWORD; cat user_add.sh) | ssh user@hostname
您必须在user
处写下hostname
的密码,而不是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