Mac环境设置SSH SCP命令别名来简化命令操作

对于有多个环境连接信息的情况下使用 Mac 环境原生自带 SSH SCP 不是很方便,所以写了该 Shell 脚本来简化 SSH SCP 命令。

安装依赖

brew install hudochenkov/sshpass/sshpass

设置别名

设置环境变量.zshrc或.bash_profile

# 使用zsh终端
vim ~/.zshrc
  • 将下面shell脚本复制到.zshrc文件中
declare -a dev_dict
declare -a pro_dict
# 测试环境(名称 别名 用户@IP 密码)
dev_dict+=("测试环境1 csapp1 root@192.168.0.100 pwd123")
dev_dict+=("测试环境2 csapp2 root@192.168.0.101 pwd123")
dev_dict+=("end")
# 生产环境(名称 别名 用户@IP 密码)
pro_dict+=("生产环境1 scapp1 root@192.168.0.200 pwd123")
pro_dict+=("生产环境2 scapp2 root@192.168.0.201 pwd456")
pro_dict+=("end")

function _scp_upload() {
    host=$1
    password=$2
	# 来源目录
	param_source=$3
	# 目标目录
	param_target=$4
	# -r 目录
	param_is_dir=$5
    if [ -z "$param_is_dir" ]; then
    	echo "阿里云首次登录需要使用ssh先连接一次(ssh root@IP)"
		echo "ssh $host $password"
        sshpass -p $password scp "$param_source" $host:"$param_target"
    else
    	echo "阿里云首次登录需要使用ssh先连接一次(ssh root@IP)"
		echo "ssh $host $password"
        sshpass -p $password scp "$param_is_dir" "$param_source" $host:"$param_target"
    fi
}

function _scp_download() {
    host=$1
    password=$2
	# 来源目录
	param_source=$3
	# 目标目录
	param_target=$4
	# -r 目录
	param_is_dir=$5
    if [ -z "$param_is_dir" ]; then
    	echo "阿里云首次登录需要使用ssh先连接一次(ssh root@IP)"
		echo "ssh $host $password"
        sshpass -p $password scp $host:"$param_source" "$param_target"
    else
    	echo "阿里云首次登录需要使用ssh先连接一次(ssh root@IP)"
		echo "ssh $host $password"
        sshpass -p $password scp "$param_is_dir" $host:"$param_source" "$param_target"
    fi
}

function myssh() {
	param_env=$1
	if [ -z $param_env ]; then
		echo "myssh dev|pro alias"
		return
	fi
	param_alias=$2
	if [ "pro" = "$param_env" ]; then
		env_dict=("${pro_dict[@]}")
	elif [ "dev" = "$param_env" ]; then
		env_dict=("${dev_dict[@]}")
	fi
	for ((i=0; i<${#env_dict[@]}; i++)) do
		read name alias host password <<< "${env_dict[$i]}"
		if [ -z "$param_alias" ]; then
			echo "$name myssh $param_env $alias"
		fi
		if [ "${alias}" = "$param_alias" -a $param_alias ]; then
            echo "$name ssh $host"
            echo "阿里云首次登录需要使用ssh先连接一次(ssh root@IP)"
			echo "ssh $host $password"
            sshpass -p $password ssh $host
		fi
	done
}

function myscp() {
	param_env=$1
	if [ -z $param_env ]; then
		echo "myscp dev|pro alias -u|-d /source /target [-r]"
		return
	fi
	param_alias=$2
	# 来源目录
	param_source=$4
	# 目标目录
	param_target=$5
	# -u 上传 -d 下载
	param_upload_or_download=$3
	# -r 目录
	param_is_dir=$6
	if [ "pro" = "$param_env" ]; then
		env_dict=("${pro_dict[@]}")
	elif [ "dev" = "$param_env" ]; then
		env_dict=("${dev_dict[@]}")
	fi
	for ((i=0; i<${#env_dict[@]}; i++)) do
		read name alias host password <<< "${env_dict[$i]}"
		if [ -z "$param_alias" ]; then
			echo "$name myscp $param_env $alias -u ~/Desktop /home/"
			echo "$name myscp $param_env $alias -d /home/ ~/Downloads"
		fi
		if [ "${alias}" = "$param_alias" -a $param_upload_or_download ]; then
			if [ "$param_upload_or_download" = "-u" ]; then
				echo "$name [$param_source] => [$host:$param_target]"
				_scp_upload $host $password $param_source $param_target $param_is_dir
			elif [ "$param_upload_or_download" = "-d" ]; then
				echo "$name $host [$host:$param_source] => [$param_target]"
				_scp_download $host $password $param_source $param_target $param_is_dir
			fi
		fi
	done
}

注: 密码字符串如果含有 $ 特殊字符,则需要用转义字符 \ $ 替代

别名用法

帮助命令

myssh
# 输出结果 myssh dev|pro alias
myscp
# 输出结果 myscp dev|pro alias -u|-d /source /target [-r]

列出当前配置连接信息

# 列出所有测试环境
myssh dev
myscp dev
# 列出所有生产环境
myssh pro
myscp pro
  • 输出结果
测试环境1 myssh dev csapp1
测试环境2 myssh dev csapp2
# 或
测试环境1 myscp dev csapp1 -u ~/Desktop /home/
测试环境2 myscp dev csapp2 -d /home/ ~/Downloads

SSH连接

# ssh连接测试环境csapp1服务器
myssh dev csapp1
# ssh连接测试环境csapp2服务器
myssh dev csapp2

SCP上传文件或目录

# 上传文件到csapp1服务器home目录下
myscp dev csapp1 -u ~/Desktop/filename /home/
# 上传目录到csapp1服务器home目录下
myscp dev csapp1 -u ~/Desktop/dir /home/ -r

SCP下载文件或目录

# 下载csapp1服务器home目录下filename文件到本地Downloads目录
myscp dev csapp1 -d /home/filename ~/Downloads
# 下载csapp1服务器home目录下dir目录到本地Downloads目录
myscp dev csapp1 -d /home/dir ~/Downloads -r
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值