程序员

上传神器sshcp:ssh免密登录、scp一键上传

2019-12-05  本文已影响0人  科研者

1. 简介

sshcp 命令使您可以通过一个简短的命令就实现如下功能:

主页:https://github.com/GuoBinyong/sshcp

如果您在使用的过程中遇到了问题,或者有好的建议和想法,您都可以通过以下方式联系我,期待与您的交流:

2. sshcp解决的问题

工作中经常需要将一些文件上传到服务器,而通常的步骤如下:

  1. 通过 ssh 命令登录到服务器,如:ssh -l root -p 22 192.168.90.33
  2. 输入登录服务器的密码;
  3. 通过 cd 命令转到指定目录,如:cd /data/mc/website/guo.binyong.com/www/webapp
  4. 通过 rm 命令删除掉所有的文件,如:rm -rf *
  5. 退出 ssh 登录;
  6. 通过 scp 命令将 本地某个目录里的所有文件 上传 到服务器刚才删除的目录内,如:scp -r dist/* root@192.168.90.33:/data/mc/website/guo.binyong.com/www/webapp
  7. 输入登录服务器的密码;

每次上传,都要经过这几步,对于经常上传的人来说,这简直是灾难;

能不能直接写个 shell 脚本,自动执行呢?不能,因为 ssh 命令 和 scp 命令都没有提供密码选项,只能以交互的方式运行,即:只能手动输入密码;

那怎么办呢?

为了解决这个问题,我专门研究了 expect 和 tcl 脚本语言,最终,sshcp 工具诞生了;

3. 特性

4. 依赖

sshcp 依赖于 expect;所以运行些脚本之前,需要保证环境中能访问到 expect 命令;

注意:Mac系统自带 expect,无需额外安装其它东西

5. 安装方式

方式1:直接安装

直接将 sshcp仓库 中的 sshcp 文件放入命令行的 PATH 目录中,如:/usr/local/bin/

注意:

方式2:通过brew安装

如果你的电脑上已经安装了包管理工具 brew,则可以通过 brew 来安装,命令如下:

brew install sshcp

方式3:通过自带的下载命令安装

curl https://raw.githubusercontent.com/GuoBinyong/sshcp/master/sshcp -o /usr/local/bin/sshcp && chmod a+x /usr/local/bin/sshcp

6. 语法

sshcp [-tp|--type type] [-c|--conf conf] [-pw|--password password] [-h|--host host] [-p|--prot prot] [-s|--sour sour] [-t|--targ targ] [-d|--dele dele] [-pmt|--prompt prompt]

sshcp [-help|--help|help]

7. 选项

sshcp 命令支持以下选项

8. 配置文件

配置文件是作为 tcl 脚本被优先执行的,所以配置文件中可以书写 tcl 代码来实现更加细粒度的控制和配置;

配置文件的全名(完整名称)由三部分组成:配置文件名、中缀名、后缀名,由 点 . 分隔,格式如下:

配置文件名.type.tcl

8.1. 配置文件可存放在两个地方

8.2. 配置文件可分为两类

8.3. 配置文件的加载顺序和优先级

选项和变量配置文件的加载顺序和优先级如下(优先级从底到高排列):

  1. 用户级的公共配置文件: ~/.sshcp/sshcprc[.tcl]
  2. 用户级的私有配置文件:~/.sshcp/sshcprc.<type>[.tcl]
  3. 项目级的公共配置文件: <PWD>/<conf>[.tcl]
  4. 项目级的私有配置文件: <PWD>/<conf>.<type>[.tcl]
  5. 命令行选项

备注:

8.4. 配置文件查找规则

脚本会按照下面的顺序查找配置文件,如果找到,就会加载该配置文件并停止查找:

  1. 查找带相应的带 tcl 后缀名的配置文件;
  2. 查找不相应的不带 tcl 后缀名的配置文件;

脚本会先查找带 tcl 后缀名的配置文件,如果找到了,则会加载带 tcl 后缀名的配置文件,并且会忽略相应的不带 tcl 后缀名的配置文件;如果没有找到,则会继续查找不带 tcl 后缀名的配置文件;

9. 可配置变量

配置文件中可设置的变量及其语法示例如下

注意:以下所有配置字段的值均是字符串,字符串可以用双引号 " 或 花括号 {} 包裹着,也可以不用包裹,当字符串中包含空格等能引起不达预期效果的字符时,可以通过将该字符串包裹在 双引号 或 花括号 {} 中来解决这类问题

type

配置文件的类型 该类型会作为配置文件的中缀名;

set type "dev"

conf

配置文件的路径

set conf "sshcprc"

name

ssh登录时的用户名

set name "keyanzhe"

password

用户名对应的密码

set password "123456789"

host

服务器的地址

set host "192.168.90.33"

prot

服务器的端口

set prot "9033"

sour

源目录;

set sour "dist/"

targ

服器上的目标目录

set targ "/data/mc/website/guo.binyong.com/www/webapp"

dele

在上传sour目录中的文件之前,是否删除 targ 目录中的所有文件; 0 : 不删除;1 : 删除; 默认值: 0 ;

set dele 0

prompt

能匹配服务器的命令行提示符的字符串 或 正则表达式; 默认值:\S,即表示:包含非空字符的字符串;

set prompt {\S}

10. 配置文件示例

sshcprc.tcl

set name keyanzhe
set password 123456789
set host 192.168.90.33
set prot 9033
set sour dist/
set targ "/data/mc/website/guo.binyong.com/www/webapp"
set prompt {#}
上一篇下一篇

猜你喜欢

热点阅读