# 使用自定義Shell腳本hello快速配置Linux用戶賬戶

使用自定義Shell腳本快速配置Linux用戶賬戶

在學校實驗室管理Linux服務器,或者公司小團隊管理服務器時,大家需要一個能隔離自己服務,但是自己又需要對服務器的完整權限的情形。創建和配置用戶賬戶是一項常見但繁瑣的任務。特別是當你需要頻繁為新團隊成員設置賬戶,或在多臺服務器上保持一致的用戶配置時,linux本身用戶指令已經很完善,手動添加也方便,但是我偶爾碰到這種添加用戶的需求,還是感覺繁瑣和麻煩,所以還是想寫個腳本快速創建用戶,分配root,docker權限。

今天,我要分享一個名為hello的自定義腳本,希望它能幫助你一鍵完成用戶創建、權限設置、Docker組管理等操作,簡化你系統管理的工作。

腳本功能概述

hello腳本提供以下功能:

  • 創建新用戶并設置密碼
  • 配置sudo權限(無需密碼)
  • 自動添加用戶到Docker組(如果存在)
  • 創建友好的.bashrc配置和系統信息顯示
  • 生成包含賬戶信息的README文件
  • 檢測Docker服務狀態并提供相關提示

安裝和使用方法

步驟1:創建腳本文件

首先,使用你喜歡的文本編輯器創建腳本文件:

sudo vim /usr/local/bin/hello

步驟2:粘貼以下代碼

將下面的代碼復制到編輯器中:

#!/bin/bash# 獲取腳本的基本名稱,而不是完整路徑
SCRIPT_NAME=$(basename "$0")if [ $# -ne 1 ]; thenecho "用法: $SCRIPT_NAME 用戶名"  # 使用基本名稱而不是完整路徑echo "例如: $SCRIPT_NAME ck"     # 使用基本名稱而不是完整路徑exit 1
fiUSERNAME=$1# 檢查是否以root權限運行
if [ "$(id -u)" -ne 0 ]; thenecho "錯誤: 請使用root權限運行此腳本"exit 2
fi# 檢查docker服務是否安裝和運行
if ! command -v docker &> /dev/null; thenecho "警告: Docker未安裝"docker_installed=false
elif ! systemctl is-active --quiet docker 2>/dev/null; thenecho "警告: Docker服務未運行"docker_installed=truedocker_running=false
elseecho "確認: Docker服務正在運行"docker_installed=truedocker_running=true
fi# 檢查用戶是否已存在
if id "$USERNAME" &>/dev/null; thenecho "用戶 $USERNAME 已存在,將更新配置..."user_existed=true
elseecho "創建新用戶 $USERNAME..."useradd -m -s /bin/bash $USERNAME# 設置密碼為單個空格echo -e " \n " | passwd $USERNAME 2>/dev/null || \{ echo " " | passwd --stdin $USERNAME 2>/dev/null; } || \{ echo "$USERNAME: " | chpasswd 2>/dev/null; } || \{ echo "警告: 無法設置空格密碼,使用用戶名作為臨時密碼"; echo "$USERNAME:$USERNAME" | chpasswd; }user_existed=false
fiUSER_HOME=$(eval echo ~$USERNAME)# 創建.bashrc或添加自定義配置(保留有用的shell配置)
if [ "$user_existed" = false ] || [ ! -f "$USER_HOME/.bashrc" ]; then# 如果是新用戶或沒有.bashrc,創建一個新的cp /etc/skel/.bashrc "$USER_HOME/.bashrc"
fi# 添加一些有用的別名和環境變量到.bashrc
if ! grep -q "# User custom aliases and functions" "$USER_HOME/.bashrc"; thencat >> "$USER_HOME/.bashrc" << 'EOF'# User custom aliases and functions
alias ll='ls -la'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'# 顯示系統信息
if [ "$TERM" != "dumb" ]; thenecho "歡迎, $(whoami)@$(hostname)"dateecho ""echo "系統負載: $(cat /proc/loadavg)"echo "內存使用: $(free -h | grep Mem | awk '{print $3 " / " $2}')"echo "磁盤使用: $(df -h / | grep / | awk '{print $3 " / " $2 " (" $5 ")"}')"echo ""
fi
EOF
fi# 創建簡單的README文件
cat > "$USER_HOME/README.txt" << EOF
歡迎使用服務器賬戶:$USERNAME賬戶特權:
- 具有sudo權限(無需密碼)
$(if getent group docker > /dev/null && groups "$USERNAME" | grep -q "\bdocker\b"; thenecho "- 可直接使用docker命令(已加入docker組)"
fi)使用提示:
- 請根據個人習慣創建和組織目錄結構
- 請定期清理不必要的文件以節省磁盤空間如有任何問題請聯系系統管理員。
EOF# 確保所有文件屬于用戶
chown -R $USERNAME:$USERNAME "$USER_HOME"# 檢查docker組是否存在并處理
if getent group docker > /dev/null; then# 檢查用戶是否已在docker組中if groups "$USERNAME" | grep -q "\bdocker\b"; thenecho "用戶 $USERNAME 已在docker組中"elseecho "將 $USERNAME 添加到docker組..."usermod -aG docker $USERNAMEfi
elseecho "警告: docker組不存在,無法將用戶添加到docker組"if [ "$docker_installed" = true ]; thenecho "Docker已安裝但docker組不存在,這可能是配置問題"fi
fi# 確保用戶有sudo權限(無需密碼)
if [ -f "/etc/sudoers.d/$USERNAME" ]; thenecho "用戶 $USERNAME 的sudo配置已存在,確保權限正確..."
elseecho "設置 $USERNAME 的sudo權限..."
fi
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USERNAME
chmod 0440 /etc/sudoers.d/$USERNAME# 輸出操作總結
echo "----------------------------------------"
echo "操作完成!"
if [ "$user_existed" = true ]; thenecho "- 已更新用戶 $USERNAME 的配置"
elseecho "- 已創建用戶 $USERNAME (密碼為空格)"
fi
echo "- 已設置自定義.bashrc配置"
echo "- 已確保sudo權限(無需密碼)"# docker相關狀態
if getent group docker > /dev/null; thenif groups "$USERNAME" | grep -q "\bdocker\b"; thenecho "- 已確保用戶在docker組中"fi
elseecho "- 未添加到docker組(組不存在)"
fi# 輸出docker狀態總結
echo "----------------------------------------"
echo "Docker狀態:"
if [ "$docker_installed" = false ]; thenecho "- Docker未安裝,如需使用,請先安裝Docker:"echo "  sudo apt update && sudo apt install docker.io -y"echo "  或參考Docker官方安裝指南"
elif [ "$docker_running" = false ]; thenecho "- Docker已安裝但未運行,可使用以下命令啟動:"echo "  sudo systemctl start docker"echo "  sudo systemctl enable docker  # 設置開機自啟"
elseecho "- Docker服務正常運行中"
fi# 如果用戶已創建但docker組不存在,提供重新運行的提示
if [ "$user_existed" = true ] && ! getent group docker > /dev/null && [ "$docker_installed" = true ]; thenecho "----------------------------------------"echo "提示: 安裝Docker后,請重新運行此腳本將用戶 $USERNAME 添加到docker組"
fiecho "----------------------------------------"
echo "用戶 $USERNAME 的主目錄: $USER_HOME"
echo "可通過以下命令登錄用戶: su - $USERNAME"

步驟3:設置執行權限

保存文件后,為腳本添加執行權限:

sudo chmod 775 /usr/local/bin/hello  # 讓同組用戶也可直接執行,編輯

### 使用方法現在,你可以通過簡單的命令創建或更新用戶:```bash
sudo hello username

例如,創建名為"baijs"的用戶:

sudo hello baijs

在這里插入圖片描述

腳本代碼部分注釋

1. 用戶創建和密碼設置

腳本首先檢查用戶是否已存在,如果不存在,則創建用戶并設置密碼。為了便于新用戶第一次登錄,腳本嘗試設置一個簡單的密碼(空格字符):

# 設置密碼為單個空格
echo -e " \n " | passwd $USERNAME 2>/dev/null || \
{ echo " " | passwd --stdin $USERNAME 2>/dev/null; } || \
{ echo "$USERNAME: " | chpasswd 2>/dev/null; } || \
{ echo "警告: 無法設置空格密碼,使用用戶名作為臨時密碼"; echo "$USERNAME:$USERNAME" | chpasswd; }

這段代碼嘗試多種方法設置空格密碼,確保在不同的Linux發行版上都能正常工作。如果所有方法都失敗,將回退到使用用戶名作為密碼。

2. 自定義Shell環境

腳本為新用戶配置了一個友好的Shell環境:

  • 實用的別名(ll, la, .., 等)
  • 登錄時顯示系統狀態信息
  • 定制的.bashrc配置

當用戶登錄時,他們會看到類似這樣的信息:

歡迎, username@hostname
Wed Mar 26 15:30:45 CST 2025系統負載: 0.15 0.05 0.01 1/292 3021
內存使用: 1.2G / 8.0G
磁盤使用: 12G / 50G (25%)

3. 權限和組管理

腳本自動處理以下權限相關配置:

  • 配置sudo權限(無需密碼)
  • 檢測并添加用戶到Docker組(如果存在)
  • 確保所有主目錄文件的所有權正確

4. 便捷的用戶文檔

腳本在用戶主目錄創建README.txt文件,包含使用指南和賬戶特權信息,這里可以修改成你實驗室的一些須知信息或者其他:

歡迎使用服務器賬戶:username賬戶特權:
- 具有sudo權限(無需密碼)
- 可直接使用docker命令(已加入docker組)使用提示:
- 請根據個人習慣創建和組織目錄結構
- 請定期清理不必要的文件以節省磁盤空間如有任何問題請聯系系統管理員。

自定義腳本

你可以根據自己的需求修改腳本。以下是一些常見的自定義點:

調整安全設置

如果你需要更嚴格的安全策略,可以修改sudo權限部分:

# 限制sudo權限到特定命令
echo "$USERNAME ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/apt" > /etc/sudoers.d/$USERNAME

常見問題排查

如果腳本執行遇到問題,請檢查以下幾點:

腳本找不到或無法執行

遇到"command not found"或"Permission denied"錯誤時:

# 檢查腳本權限
ls -la /usr/local/bin/hello# 修復權限
sudo chmod +x /usr/local/bin/hello# 確保腳本在PATH中
sudo ln -sf /usr/local/bin/hello /usr/bin/hello

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73543.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73543.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity Animation的其中一種運用方式

Animation是Unity的舊的動畫系統&#xff0c;先說目的&#xff0c;其使用是為了在UI中播放動效&#xff0c;并且在動效播放結束后接自定義事件而設計的 設計的關鍵點在于&#xff0c;這個腳本不是通過Animation直接播放動畫片段&#xff0c;而是通過修改AnimationState的nor…

matplotlib——南丁格爾玫瑰

南丁格爾玫瑰圖&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;是一種特殊形式的柱狀圖&#xff0c;它以南丁格爾&#xff08;Florence Nightingale&#xff09;命名&#xff0c;她在1858年首次使用這種圖表來展示戰爭期間士兵死亡原因的數據。 它將數據繪制在極坐…

TensorFlow面試題及參考答案

目錄 什么是 TensorFlow 的計算圖?詳細描述 TensorFlow 計算圖的組成結構(節點、邊、會話) 它與動態圖(Eager Execution)的區別是什么?TensorFlow 靜態計算圖與動態圖(Eager Execution)的區別及適用場景是什么? 解釋張量(Tensor)的概念及其在 TensorFlow 中的作用…

6.go語言函數

Go語言中的函數是組織代碼的最小單元&#xff0c;用于封裝一段代碼&#xff0c;完成特定的功能。函數的使用可以減少代碼冗余&#xff0c;提高代碼的可讀性和可維護性。 函數的基本定義和語法 在Go語言中&#xff0c;定義一個函數的基本語法如下&#xff1a; func functionN…

SpringCould微服務架構之Docker(4)

Docker ce是社區版。 安裝docker之前&#xff0c;先安裝yum-util 。 安裝docker之前&#xff0c;一定要先關閉防火墻。

Keepalived 實現高可用方案

Keepalived簡介 ?Keepalived? 是一個基于 ?VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;協議?的高可用性解決方案&#xff0c;主要用于實現?服務故障自動切換&#xff08;Failover&#xff09;和負載均衡?。通過管理虛擬 IP&#xff08;VIP&#xf…

WPS JS宏編程教程(從基礎到進階)--第二部分:WPS對象模型與核心操作

第二部分&#xff1a;WPS對象模型與核心操作 WPS對象的屬性、方法、集合 工作簿對象常用表達方式工作表對象常用表達方式單元格對象常用表達方式 單元格操作實戰 單元格復制與重定位單元格偏移與尺寸調整 顏色設置專題 索引顏色與RGB顏色按條件動態設置單元格顏色 第二部分&…

基于DrissionPage的TB商品信息采集與可視化分析

一、項目背景 隨著電子商務的快速發展,淘寶作為中國最大的電商平臺之一,擁有海量的商品信息。這些數據對于市場分析、用戶行為研究以及競爭情報收集具有重要意義。然而,由于淘寶的反爬蟲機制和復雜的頁面結構,直接獲取商品信息并不容易。尤其是在電商行業高速發展的今天,商…

【003安卓開發方案調研】之ReactNative技術開發安卓

基于2025年最新行業動態和搜索資料&#xff0c;以下是針對國內使用React Native&#xff08;RN&#xff09;開發安卓應用的深度分析&#xff1a; 一、技術成熟度評估 1. 核心架構升級 新架構全面普及&#xff1a;2024年起&#xff0c;React Native的 新架構&#xff08;Fabri…

JS數組方法

數組方法 一、數組 JavaScript 數組的大小是可調整的&#xff0c;并且可以包含不同 數據類型。&#xff08;當不需要這些特性時&#xff0c;請使用 類型數組。&#xff09; 注&#xff1a;JavaScript 類型數組是類似數組的對象&#xff0c;它提供了一種在內存緩沖區中讀取和寫…

【一起學Rust | Tauri2.0框架】深入淺出 Tauri 2.0 應用調試:從新手到專家的蛻變

前言 Tauri 是一款備受矚目的跨平臺桌面應用開發框架&#xff0c;它允許開發者使用 Web 技術棧&#xff08;HTML、CSS、JavaScript&#xff09;構建高性能、安全的原生應用。Tauri 2.0 的發布帶來了諸多令人興奮的新特性和改進&#xff0c;進一步提升了開發體驗和應用性能。然…

Python項目-基于Python的網絡爬蟲與數據可視化系統

1. 項目簡介 在當今數據驅動的時代&#xff0c;網絡爬蟲和數據可視化已成為獲取、分析和展示信息的重要工具。本文將詳細介紹如何使用Python構建一個完整的網絡爬蟲與數據可視化系統&#xff0c;該系統能夠自動從互聯網收集數據&#xff0c;進行處理分析&#xff0c;并通過直觀…

TCP/IP三次握手的過程,為什么要3次?

一&#xff1a;過程 第一次&#xff08;SYN&#xff09;&#xff1a; 客戶端發送一個帶有SYN標志的TCP報文段給服務器&#xff0c;設置SYN1&#xff0c;并攜帶初始序列號Seqx&#xff08;隨機值&#xff09;&#xff0c;進入SYN_SENT狀態。等待服務器相應。 第二次&#xff08…

消息隊列性能比拼: Kafka vs RabbitMQ

本內容是對知名性能評測博主 Anton Putra Kafka vs RabbitMQ Performance 內容的翻譯與整理, 有適當刪減, 相關數據和結論以原作結論為準。 簡介 在本視頻中&#xff0c;我們將首先比較 Apache Kafka 和傳統的 RabbitMQ。然后&#xff0c;在第二輪測試中&#xff0c;會將 Kaf…

打磨和修改:字帖自動生成

功能增加一些。 一個人和大語言模型對話的結果。 不過是重復性勞動&#xff0c;特別需要創意的地方還是不容易做到。

電腦干貨:萬能驅動--EasyDrv8

目錄 萬能驅動EasyDrv8 功能介紹 主程序界面 驅動解壓與安裝 PE環境支持 系統部署環境 桌面環境一鍵解決方案 萬能驅動8電腦版是由IT天空出品的一款智能識別電腦硬件并自動安裝驅動的工具&#xff0c;一般又稱為it天空萬能驅動&#xff0c;萬能驅動vip版&#xff0c;簡稱…

LeetCode熱題100JS(79/100)第十五天|347|295|121|55|45

347. 前 K 個高頻元素 題目鏈接&#xff1a;347. 前 K 個高頻元素 難度&#xff1a;中等 刷題狀態&#xff1a;1刷 新知識&#xff1a; 解題過程 思考 示例 1: 輸入: nums [1,1,1,2,2,3], k 2 輸出: [1,2] 沒思路&#xff0c;看答案 題解分析 參考題解鏈接&#xff1a…

Sentinel 限流利器(功能以及源碼解析)

Sentinel簡介 Sentinel是阿里開源的一款面向分布式、多語言異構化服務架構的流量治理組件。 主要以流量為切入點&#xff0c;從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性。 核心概念 資源 資源是…

子數組 之 logTrick算法,求解或,與,LCM,GCD

文章目錄 gcd的問題最大公約數 求解子數組的&,|,lcm,gcd的最值or計數問題&#xff0c;如果采用暴力的做法&#xff0c;那么時間復雜度會來到o(n^2),其實在求解的過程中&#xff0c;會出現很多的結果不變的情況&#xff0c;所以我們就可以提前結束 存在一定的單調性&#x…

How to use pgbench to test performance for PostgreSQL?

pgbench 是一個用于測試 PostgreSQL 數據庫性能的基準測試工具。通過模擬多個客戶端并發執行 SQL 查詢&#xff0c;它可以幫助你評估數據庫的性能。以下是使用 pgbench 的基本步驟&#xff1a; 安裝 pgbench pgbench 是 PostgreSQL 的一部分&#xff0c;因此在安裝 PostgreSQ…