zoukankan      html  css  js  c++  java
  • sshhostremotecopy:Bash/Shell脚本,自动拷贝本地主机SSH密钥和配置信息到远程主机,方便在远程主机上使用ssh命令连接其他服务器

    ssh-host-remote-copy:Bash/Shell脚本,自动拷贝本地主机SSH密钥和配置信息到远程主机,方便在远程主机上使用ssh命令连接其他服务器
    支持拷贝单个或多个主机配置信息及密钥:

    #!/bin/bash 
    SCRIPTPATH=$(realpath $0)
    #SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
    #SCRIPTPATH=$(dirname $(readlink -f "$0"))
    
    display_usage() {
    	echo -e "$SCRIPTPATH\n"
        echo -e "\t自动拷贝本地~/.ssh/config中指定主机配置项和对应私钥到远程主机."
    	echo -e "\t目的:方便在远程主机上通过ssh免密码连接另一台服务器"
        echo -e "\nUsage:\n\tssh-host-remote-copy [connect hostname] [copy target host]"
    	echo -e "Example:\n\tssh-host-remote-copy racknerd kunming"
    	echo -e "\n\t妙用:拷贝本地所有的主机配置和私钥到远程服务器可以使用以下命令(.号匹配所有主机):"
    	echo -e "\tssh-host-remote-copy racknerd ."
    }
    # if less than two arguments supplied, display usage
    if [  $# -lt 2 ]
    then
        display_usage
        exit 1
    fi
    
    # check whether user had supplied -h or --help . If yes display usage
    if [[ ( $* == "--help") ||  $* == "-h" ]]
    then
        display_usage
        exit 0
    fi
    
    sshHost=$1
    copyTarget=$2
    
    hostInfo=$(/v/bin/sshfind.py $copyTarget)
    
    findCount=$(echo "$hostInfo"|grep -ci 'Host ')
    
    if [ $findCount -gt 1 ];
    then
    	echo "拷贝目标找到多个匹配,请注意拷贝动作是否符合预期!"
    fi
    
    sshConfigFile="/tmp/ssh_config_tmp.$$"
    trap "rm -f $sshConfigFile" 0
    #清除配置文件多余行
    hostInfoFormat=$(echo "$hostInfo"|awk '/^[0-9]+$/{next};/sshfind/{exit};/以上为全字匹配结果/{exit};/^$/{next};{print}')
    echo "$hostInfoFormat">$sshConfigFile
    
    IdentityFile=$(echo "$hostInfoFormat"|awk '/IdentityFile/{print $NF}')
    #echo "$IdentityFile"
    ssh $sshHost 'mkdir -p ~/.ssh/'
    echo -e "Copy Key Files to remote server..."
    keyFiles=$(echo -e "$IdentityFile"|tr '\n' ' ')
    eval scp $keyFiles $sshHost:~/.ssh/
    echo -e "Copy SSH Config temp file to remote server..."
    scp $sshConfigFile $sshHost:$sshConfigFile
    echo -e "Configure ssh config for user..."
    ssh $sshHost 'touch ~/.ssh/config;chmod 600 ~/.ssh/*;\
    	awk  '\''BEGIN{while(getline line<"'$sshConfigFile'"){print line}}{print}'\'' ~/.ssh/config|tee ~/.ssh/config >/dev/null;\
    	rm -f /tmp/ssh_config_tmp*'
    echo -e "Done..."
    

    本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/p/15619360.html

  • 相关阅读:
    【秒懂音视频开发】10_PCM转WAV
    【秒懂音视频开发】09_播放PCM
    【秒懂音视频开发】08_音频录制02_编程
    【秒懂音视频开发】07_音频录制01_命令行
    【秒懂音视频开发】06_Qt开发基础
    高考数学考点关联表[Ⅳ]
    高考数学考点关联表[Ⅲ]
    高考数学考点关联表[Ⅱ]
    高考数学考点关联表[Ⅰ]
    反比例函数
  • 原文地址:https://www.cnblogs.com/cnhack/p/15619360.html
Copyright © 2011-2022 走看看