不知道你是否也曾像我一样面对这样的问题:想要简单的在远程主机上上传下载数据文件、运行个命令,但要么需要通过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任务状态
配合使用,威力无穷~