[英]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.