云主机或者 VPS 主机相对于开发者来说是一个空白的操作系统,必要的软件环境都需要开发者自己安装,自己动手丰衣足食吗,这样比较灵活的,但也会相对麻烦。在单机环境下,上传代码文件(或者代码)包主要有这么几种办法:
这种方式需要服务端和本地客户端都安装 FTP 配套软件。FTP 服务端开源软件有很多,比如 vsftpd,Pure-FTPd,ProFTPD 等等,这些 FTP 服务端软件历史也比较悠久,网上的资料也非常多。如果是仅仅用了上传代码文件,这些软件并无明显的差别,这里我们以 vsftpd 为例演示使用方法:
yum -y install vsftpd
# 添加非登录用户,仅限 ftp 使用
$ sudo useradd wwwuser -d /home/wwwuser -s /sbin/nologin
$ sudo passwd wwwuser
$ sudo vim /etc/vsftpd/vsftpd.conf
#安全配置
#开启日志记录功能,便于追踪问题,如果磁盘空间小的话日志要定期清理
xferlog_enable=YES
#日志文件路径
xferlog_file=/var/log/xferlog
#禁止匿名用户上传文件
anonymous_enable=NO
#设置白名单用户,只允许有限几个用户数上传文件,白名单文件默认在 '/etc/vsftpd/user_list' 中
userlist_enable=YES
userlist_deny=NO
#修改默认端口,默认为21
listen_port=50077
service vsftpd restart
另外,vsftp 也支持 https 数据传输,这里不再赘述,有需要的同学可以参考这篇文章:《How To Configure vsftpd to Use SSL/TLS on a CentOS VPS》
免费的 ftp client 也非常多,这里就不做介绍了。
scp (secure copy) 是 Linux 下的远程文件传输工具,而且是加密传输。如果你的本地环境是 MacOS 或者某些 Linux 的桌面版本,用这个工具传输代码会很方便,拿来就用,不用单独安装。
scp 命令格式为:
scp <选项> 本地文件路径 用户名@地址:远程路径
用法例如:
$ scp ~/wordpress/4.6.1/latest.tar.gz coderxing@www.coderxing.com:~
coderxing@www.coderxing.com's password:
latest.tar.gz 100% 7774KB 3.8MB/s 00:02
常用选项为:
-r 拷贝目录
-P 指定 ssh 端口
-v 显示调试信息
-C 启用压缩传输
-l 限制传输速度,单位是 Kbit/s.
scp 每次提交文件都需要输入密码,比较麻烦,可以用以下集中方式配置无密码传输。
scp 是基于 ssh 协议,scp 无密码传输相当于配置 ssh 的无密码登录,配置方式如下:
[coderxingMacintosh]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/coderxing/.ssh/id_rsa):
Created directory '/home/coderxing/.ssh'.
Enter passphrase (empty for no passphrase): <这里直接回车,无密码登录不需要设置密码>
Enter same passphrase again: <回车>
Your identification has been saved in /home/coderxing/.ssh/id_rsa.
Your public key has been saved in /home/coderxing/.ssh/id_rsa.pub.
The key fingerprint is:
0f:81:34:7f:15:5c:66:eb:eb:83:c3:46:3c:4a:c6:58 coderxing@VM_centos
The key's randomart image is:
+--[ RSA 2048]----+
| o .oo+ |
| . + ..o . |
| . o . . |
| oE . |
| S+ . . |
| .o+ + . |
| o.+ o. |
| . =.. |
| . ... |
+-----------------+
[coderxingMacintosh]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGKklAId/dtp4UUuQQuHog1ImfFnKpr8aVN4WgkEO8S8mZ7C3jvLxvI0SEYjWccmtYirWTMNZSCT0S6qNSmvjjw96VMfYQ3o/0k4Rp+EIX2wqj+1iaJQtnrrZE7IGehnMAD/m6/BPZOlCR32nXMg349PkXTxHv9lzi3L0eTO9v9LuFQenZnrH6xt0K2G5NLNIMhs0r8MAEU7MwiKfx9rTwGVDHmjF3iB/WlhYAhax/ooV5hpJqBhWzirh/KS0yHWJQfL/eDIa0vWl99HNaJrGaeXl4kBziG9IrDsL7ut7MCGYR/tOmDB3ua4Bq757UfV/GALqcLopWfPtJugp7AbKj coderxing@local
ssh-keygen
命令默认使用 rsa 非对称加密算法生成秘钥,会生成公钥和私钥两个文件,请求方使用公钥加密请求,请求接受方使用私钥解密请求数据,这样既可以保证数据传输的安全性,防止被篡改。生成的文件默认保存在当然用户主目录的 .ssh
文件夹,如图:
[coderxingMacintosh] $ ls ~/.ssh/
id_rsa id_rsa.pub
其中 id_rsa.pub 是公钥,id_rsa 是私钥。
[coderxingVM] $ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGKklAId/dtp4UUuQQuHog1ImfFnKpr8aVN4WgkEO8S8mZ7C3jvLxvI0SEYjWccmtYirWTMNZSCT0S6qNSmvjjw96VMfYQ3o/0k4Rp+EIX2wqj+1iaJQtnrrZE7IGehnMAD/m6/BPZOlCR32nXMg349PkXTxHv9lzi3L0eTO9v9LuFQenZnrH6xt0K2G5NLNIMhs0r8MAEU7MwiKfx9rTwGVDHmjF3iB/WlhYAhax/ooV5hpJqBhWzirh/KS0yHWJQfL/eDIa0vWl99HNaJrGaeXl4kBziG9IrDsL7ut7MCGYR/tOmDB3ua4Bq757UfV/GALqcLopWfPtJugp7AbKj coderxing@VM_58_157_centos" >> ~/.ssh/authorized_keys
[coderxingVM] $ chmod 600 ~/.ssh/authorized_keys
注意:authorized_keys
的权限必须是 600,既只有文件所有者才能读写。
配好之后,在进行 scp 就不会出现输入密码提示了:
$ scp ~/wordpress/4.6.1/latest.tar.gz coderxing@www.coderxing.com:~
latest.tar.gz 100% 7774KB 2.3MB/s 00:04
sshpass 可以让交互式的密码输入方式变成参数传递方式,也可以变相实现类似无密码访问的方式。而且某些场景下不能配置无密码访问,比如 ~/.ssh/authorized_keys 无法修改,这时 sshpass 就派上用场了,而且也可以编码到脚本中。
sshpass 需要单独安装,以下是Linux(或MacOS)环境下源码安装方式:
$ sudo wget https://downloads.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz
$ sudo tar -zxvf sshpass-1.06.tar.gz
$ cd sshpass-1.06/
$ sudo ./configure
$ sudo make
$ sudo make install
为 sshpass 和密码创建一个别名命令,这样不用每次使用都输入密码。
$ alias scptest='sshpass -v -p <密码> scp'
$ $ scptest -P 50022 ~/wordpress/wp-signup.php coderxing@www.coderxing.com:
sshpass 的常用选项
-p password #使用密码字符串作为输入
-f passwordfile #使用密码文件作为输入
-e #使用环境变量 SSHPASS 作为密码输入
-v #显示交互详情信息
除了上面介绍的两种方式,还可以使用 expect 命令,sshpass 仅限于 ssh, sftp,scp 几种基于 ssh 进行交互的命令,而且执行过程中只能使用一套密码。expect 可以根据不用的交互提示出入不同的密码。但编写expect脚本相对复杂一些,如果只是提交代码文件就略显笨重。
很多 IDE 开发工具有自己的文件提交插件,可以帮助开发者提高文件提交效率。比如 Eclipse 的 Remote System Explorer (RSE) 插件,
在 Eclipse 应用市场(Help -> Eclipse Marketplace)中搜索 "Remote System Explorer.",如下图所示: 点击 “Installed” 完成安装即可。
通过菜单 Windows -> Show Views -> Remote System 打开远程文件系统视图,如下图: 点击面板左上角的 “New Connection” 按钮进行配置,弹出配置面板如图: 从图中可见,RSE 支持多种访问方式比如 ftp, ssh, telnet,我们以ssh 为例,如图 配置过程中一直下一步即可。
双击“My Home 或者 Root” 会弹出密码提示, 如需添加文件,直接拖拽到对应目录即可,非常方便。
出处:https://www.coderxing.com/how-to-deploy-code-file-on-vps.html
本文为原创文章,采用署名-相同方式共享 3.0 中国大陆(CC BY-SA 3.0 CN))进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。