97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | ||
| 
 | ||
| if [ -d "$1" ]; then
 | ||
|   NIXHOME=$1
 | ||
| elif [ -d "$(pwd)/nixhome" ]; then
 | ||
|   NIXHOME=$(pwd)/nixhome
 | ||
| else
 | ||
|   echo ""
 | ||
|   echo "::*** Enter [root path] or [leave blank] for default to [[$(pwd)]]"
 | ||
|   read -p "***:: " NIXHOME
 | ||
|   if [ -z "$NIXHOME" ]; then
 | ||
|     NIXHOME=$(pwd)
 | ||
|   fi
 | ||
| fi
 | ||
| 
 | ||
| if [ ! -e "$NIXHOME/.bashrc" ]; then 
 | ||
|   echo "××× [[$NIXHOME/.bashrc]] not exist! Exit now. ***"
 | ||
|   exit
 | ||
| else
 | ||
|   echo "√√√ NIXHOME = [[$NIXHOME]]"
 | ||
| fi
 | ||
| echo ""
 | ||
| 
 | ||
| # $2 应当为用户名
 | ||
| if [ "$2" == 'root' ]; then
 | ||
|   HomePath=/root
 | ||
|   TheUser=root
 | ||
| elif [ "$2" ]; then
 | ||
|   HomePath=/home/$2
 | ||
|   TheUser=$2
 | ||
| else
 | ||
|   # 可能是 root 或其他
 | ||
|   HomePath=~
 | ||
|   TheUser=$(whoami)
 | ||
| fi
 | ||
| 
 | ||
| if [ -d "$HomePath" ]; then
 | ||
| 
 | ||
|   pushd "$HomePath"
 | ||
|   
 | ||
|   homescriptlist=".emacs .emacs.lisp .bashrc .bash_profile .gitignore.global.txt"
 | ||
|   echo
 | ||
|   echo "::*** Copy or link scripts? [l] to link, [c] to copy, [g] to git import, [anything else] to omit:"
 | ||
|   read -p "***:: " CopyOrLinkScripts
 | ||
|   for homescript in $homescriptlist; do
 | ||
|     if [ -e "$homescript" ] || [ -L "$homescript" ]; then
 | ||
|       mv "$homescript" "$homescript.backup-$(date -u +%Y%m%dT%H%M%Sutc)"
 | ||
|     fi
 | ||
|     if [ "$CopyOrLinkScripts" == 'l' ]; then
 | ||
|       echo "--- Linking [[$NIXHOME/$homescript]] to [[$HomePath/$homescript]] ..."
 | ||
|       ln -s "$NIXHOME/$homescript" ./
 | ||
|     elif [ "$CopyOrLinkScripts" == 'c' ]; then
 | ||
|       echo "--- Copying [[$NIXHOME/$homescript]] to [[$HomePath/$homescript]] ..."
 | ||
|       cp -r "$NIXHOME/$homescript" ./
 | ||
|     elif [ "$CopyOrLinkScripts" == 'g' ]; then
 | ||
|       curl -sSLO "https://git.faronear.org/npm/sysconfig/raw/branch/main/nixhome/$homescript"
 | ||
|     fi
 | ||
|   done  
 | ||
| 
 | ||
|   echo
 | ||
| 
 | ||
|   if [ "$(uname)" == "Darwin" ]; then
 | ||
|     echo '--- No need to configure ./ssh/authorized_keys on Mac OS X. Exit now.'
 | ||
|   elif [ "$TheUser" != 'root' ]; then
 | ||
| 
 | ||
|     mkdir -p "$HomePath/.ssh"
 | ||
|     chmod 700 "$HomePath/.ssh"
 | ||
|     if [ "$2" ]; then
 | ||
|       # 由 root 指定新用户而创建的配置文件的 owner 是 root,而不是新用户,导致新用户无法读取该文件而密钥登录失败,因此要重设 owner。
 | ||
|       chown "$TheUser:$TheUser" "$HomePath/.ssh"
 | ||
|     fi
 | ||
|     if [ -f "$HomePath/.ssh/authorized_keys" ] || [ -L "$HomePath/.ssh/authorized_keys" ]; then
 | ||
|       mv "$HomePath/.ssh/authorized_keys" "$HomePath/.ssh/authorized_keys.backup-$(date -u +%Y%m%dT%H%M%Sutc)"
 | ||
|     fi
 | ||
| 
 | ||
|     echo "::*** Append or link or omit [[$HomePath/.ssh/authorized_keys]] to config ssh server? [a] for append, [l] for link, [anything else] for omit:"
 | ||
|     read -p "***:: " AuthorizedKeys
 | ||
| 
 | ||
|     if [ "$AuthorizedKeys" = 'l' ]; then
 | ||
|       echo "--- Linking [[$NIXHOME/authorized_keys]] to [[$HomePath/.ssh/authorized_keys]] ..."
 | ||
|       ln -s "$NIXHOME/.ssh/authorized_keys" "$HomePath/.ssh/authorized_keys"
 | ||
|       sudo chmod 644 "$HomePath/.ssh/authorized_keys" # 确保其他用户能读取 nixhome/.ssh/authorized_keys
 | ||
|     elif [ "$AuthorizedKeys" = 'a' ]; then
 | ||
|       echo "--- Copying [[$NIXHOME/authorized_keys]] to [[$HomePath/.ssh/authorized_keys]] ..."
 | ||
|       cat "$NIXHOME/.ssh/authorized_keys" >> "$HomePath/.ssh/authorized_keys"
 | ||
|       chmod 600 "$HomePath/.ssh/authorized_keys"
 | ||
|     fi
 | ||
|     echo
 | ||
| 
 | ||
|   fi
 | ||
| 
 | ||
|   popd
 | ||
|   
 | ||
| else
 | ||
|   echo "!!! Not found [[$HomePath]], please try again."
 | ||
| fi
 |