簡體   English   中英

如何在遠程服務器上執行本地Shell腳本?

[英]How to execute local shell script on remote servers?

我的本地計算機上有一個Shell腳本,我必須在遠程服務器上執行該Shell腳本。 我已經完成了一些步驟,如下所示:

  1. 來自本地計算機和遠程服務器的配對SSH密鑰;
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM