工具|sync-deploy:用命令掌握你的远程主机

不知道你是否也曾像我一样面对这样的问题:想要简单的在远程主机上上传下载数据文件、运行个命令,但要么需要通过ssh直接登录主机,要么需要频繁的输入ssh或scp等命令以及ip地址,密码。

sync-deploy工具集是我去年在解决这样的问题以及远程部署PBS计算任务不便时开始写,其实质是一堆shell脚本。最近考虑到我有时候需要增加主机、切换主机,于是又新增了相应的命令,因此也再次汇总整理一下这些命令。

只要系统可以执行shell,基本都能用这个工具,因为它的实现基本就是对ssh和scp的封装。

下面我对目前可用的10个命令进行简要介绍,一些详情可以阅读https://github.com/ShixiangWang/sync-deploy

主要分为下载、配置和使用三部分,前两部分都是一次性步骤。

下载

点击下载

或克隆:

git clone https://github.com/ShixiangWang/sync-deploy.git

下载后执行add_path.sh脚本将命令添加到环境路径中,这样无论你处于什么目录都能使用。

cd sync-deploy/src
./add_path.sh

如果是苹果系统,默认会将路径写入~/.bash_profile;如果是其他系统,默认会写入~/.bashrc。如果使用的其他sh,比如zsh,那么系统识别路径不是上述两者,可以通过-d选项指定。

除了sync-command命令没有选项,其他命令基本都有选项需要指定。

准备与配置

首先在服务器端配置本地机器的公钥,以便于实现无密码文件或命令传输。

最简单的方式是在终端键入ssh-keygen然后一路按回车键。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/wangshx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/wangshx/.ssh/id_rsa.
Your public key has been saved in /c/Users/wangshx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XaNcpRZHmMp65eHKDzYIzbXYB0ZAb3EHYc7T3azgQD4 wangshx@wsx-liuxslab
The key's randomart image is:
+---[RSA 2048]----+
|       .o.+ **=  |
|         = *oB o.|
|         .E.@ . +|
|       o Oo@o+ . |
|      . S.*+o..  |
|       .....o    |
|        .o+.     |
|         .oo     |
|           ..    |
+----[SHA256]-----+

如果你使用的是windows7或者10,不知道怎么使用ssh,我推荐你安装git bash,windows10用户也可以开启Ubuntu子系统以便于使用。

将公钥id_sra.pub(本地机器.ssh子目录下)中文本内容拷贝到服务器.ssh子目录中的authorized_keys中,放在已有文本后面。如果该文件不存在则创建。

进行测试,如果不需要密码登录则成功。

然后点击打开当前目录(src/)的sync-setting文件,将远程主机的host名与ip地址改为你自己的(也可以使用后面的sync-hostadd命令)。

如果ssh服务还没有开启,请参考https://www.linuxidc.com/Linux/2015-01/112045.htm解决。

使用

使用可以分为4种类型:

  • 上传/下载文件
  • 运行命令或脚本
  • 增加/删除以及切换主机
  • PBS任务计算

下面我列出对应的命令,使用非常简单,可以通过命令 + h选项的方式阅读使用说明(除了sync-command),比如sync-download下载文件(文件夹):

Usage: sync-download -n 'remote_files' -d localdir
>>> remote_files: files you wanna download, can be directories or filenames
>>> localdir: The only one directory you wanna transfer to.
>>>          Do not set more than one destdir, error will occur.
>>>     Please do note the 'remote_files' must be quoted otherwise you use absolute file path!!!
>>>
>>> examples:
              sync-download -n '~/test/*' -d ./test
         or
              sync-download -n /public/home/liuxs/test/* -d ./test

上传/下载文件

  • sync-upload - 上传文件(夹)
  • sync-download - 下载文件(夹)

运行命令或脚本

  • sync-commad - 后面直接接运行的远程主机命令,命令最好用引号括起来,以与本地主机命令或文件/路径区别

比如查看远程主机家目录,为展示区别,我看看本地主机家目录:

$ sync-command 'ls'
biodata
download
practice
readme.md
soft
tmp
workspace
zhuqi
$ ls
Applications Documents    Library      Music        Public
Desktop      Downloads    Movies       Pictures
  • sync-run 运行远程主机可执行文件

增加/删除以及切换主机

  • sync-hostadd 增加主机
  • sync-hostdel 删除主机
  • sync-switch 切换主机

PBS任务计算

  • sync-template 新建PBS任务模板
  • sync-deploy 部署PBS计算任务
  • sync-check 检查PBS任务状态

配合使用,威力无穷~

推荐阅读更多精彩内容