1. 前言

工程的概念:我们在写一个程序或者是一个项目的时候,并不是简单的敲代码,而是从头到尾,从设计到实现然后到测试到部署,这么一个整个的流程,这个流程完结完结之后,这个整个的一个流程叫工程。
这个笔记主要是:

  1. 用 Linux 操作系统,将写好的代码提交到一个代码管理库中去,这个管理库说的是 SVN、Git 这样的东西。
  2. 测试的时候怎么把代码放到测试的服务器上,一般来说测试服务器是在 Linux 下的,当然也有 Windows 下的,Windows 下操作比较简单
  3. 登录 Linux 的时候每次都要输入用户名、密码,比较麻烦,有一个比较简单的方法

2. 操作系统

现在用的 Windows 或者是 Linux 操作系统这个都不重要,它们只是我们承载业务的一个平台,这个笔记的代码全部都是在命令行下,在 Windows 下有一个程序在里面输入 cmd 就可以打开一个黑窗口,这个窗口他不是一个终端,它只是模拟的一个 dos 环境,很多工具大多数都是在命令行下进行操作的,所以做项目不会命令行的话是非常头疼的。

1. 在 Linux 或者 MAC 下要远程登录到一个服务器上需要怎么做?

一般情况下我们远程登录的话用 ssh 命令

  1. ssh 是什么?

它是一个进行远程登录的一个工具,这个工具是命令行的,使用 Windows 的在命令行中敲 ssh 是没有任何的反应的,它会提示没有这个命令,所以在 Windows 下需要借助终端工具来实现这个功能
工具1:PuTTY,他需要去填你的服务器的 IP 地址,还要输入你的用户名和口令,输入这些东西就可以去远程登录了,剩下的操作和在 Linux 下的黑窗口中的操作是一样的
工具2:xshell 比较好用
windows下可以安装终端模拟器Cmder
Mac下建议安装iTerm2

  1. ssh 的用法 ``` //@ 前面是你登录时使用的用户名,后面既可以输入你的服务器地址也可以输入域名 ssh root@192.0.0.1 //输入密码 在这里输入密码的时候是不给回显的
    Enter your password
  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-8ba7a2a22f0e25b6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 这个有时会有一些问题,导致连接失败
  3. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-bf28773ee0f81191.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br />
  4. 这个示例就是连接失败了,此时我们需要查看防火墙是否开启了,因为 Centos 默认防火墙是开启状态的

//查看防火墙当前的状态 systemctl status firewalld //禁用防火墙 systemctl stop firewalld //启动防火墙 systemctl start firewalld //禁止开机自启动防火墙 systemctl disable firewalld //设置开机自启动防火墙 systemctl enable firewalld

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-d1e0fcfdd28d9457.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br />
  2. 上图所示的流程是这样的:查看防火墙状态 -> 发现是‘运行中’ -> 关闭防火墙 -> 输入密码 -> 再次查看防火墙的状态 -> dead 防火墙已经被关闭成功了,此时我们再次远程登录服务器
  3. 4. 当我们登录远程服务器的时候,首要条件是将服务器开启且登录上,不然是无法连接成功的,这里我用的是[VMware虚拟机](http://rj.baidu.com/soft/detail/13808.html?ald)里面使用[镜像](http://mirrors.cn99.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso)安装的 Centos ,下图已经是登录成功了
  4. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-8cdc736a5659977f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  5. 5. 此时我就可以在 windows 环境下,通过终端软件(Xshell 或者 Cmder,下面的示例均使用的是 Cmder)使用 ssh 命令登录远程服务器了
  6. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-17361161037f7500.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br />
  7. 上图已经是登录成功的状态了,“~”指的就是当前登录的这个用户,是在 home 目录下的<br />
  8. ![image.png](http://upload-images.jianshu.io/upload_images/9064013-a854bd4554f0b0f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  9. ###2. 如何在本地将文件传到远程服务器上?<br />
  10. ####把文件传到服务器上的手段是非常多的,1:ftp 命令;2 scp 命令;3:可以在 Linux 系统下装一个 samba
  11. 1. ftp 命令
  12. > 它是简单传输协议的意思,现在用这个 FTP 很少在命令行下用这个命令了,因为它本身不是很安全而且用起来也比较复杂,使用方法:

ftp //再进行远程登录 填密码 之后就进入了 ftp 到的操作环境

  1. > 进入到 ftp 的操作环境后会觉得有些奇怪,因为它既能操作本地的目录,又能操作远程服务器的目录,这样一来操作的时候会很容易就出错了,所以 ftp 命令就很少用了,但是 ftp 协议是在很多系统下使用的,机器的操作比人为的比较不容易出错
  2. 2. scp 命令
  3. > 它是一个远程的复制,如果把前面的 s 去掉就是 `cp` 命令,就是复制文件用的,前面加一个 s 那就是远程的去复制,同时它也是一个加密的链接,这个加密和 http https 中的加密方法类似,在传输通道上又做了一层加密,前面的 ssh 它本身也是加密了的,很久之前没有 ssh 命令时使用的是 telnet (严重过时且不安全的)命令这个就相当于是没有加密版本的 ssh ,它的加密方式和 scp s 的加密是差不多的
  4. 假设要在本地复制一个文件到服务器上:<br />
  5. 先在服务中创建一个目录并进入该目录下

mkdir test cd test

  1. 在本地输入下面的命令

//进入桌面 cd Desktop //查看桌面文件列表 ls //scp + 你想复制的文件 这个文件名需要加上文件的路径 因为当前已经是在文件的目录下了所以用 ./ 即可 // + 你想要复制到什么地方去 用户名@IP地址: //+ 复制到服务器的哪个路径下 这个路径必须是服务器的绝对路径(从根开始到…) 这个路径可以在 服务器端 要复制的目录下 敲 pwd scp ./timetest.js xxx@192.23.2.2:/home/sss/test Enter your password

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-3f17fd408a82fb9d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 照着上图显示的操作已经执行成功了,再在 服务器中查看是否有该文件,要记得每次复制之后一定要查看日期来确定是否复制成功了

//该命令可以查看文件的权限、日期、等等 ll

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-9c38b06d87b025d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 上面的示例是单个文件复制,下面是如何将多个文件一起复制过去,这里我们复制 .js 为后缀的文件<br />
  3. 先在本地 目录下 查看有哪些 文件,下图显示的是有两个文件

//使用 通配符 ls .js

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-a9af48424b69b4d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 开始在本地写命令进行批量复制,下图是命令行截图且执行成功了

scp ./*.js xxx@192.23.2.2:/home/sss/test Enter your password

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-3d9589cec990b3b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 再在服务器端去查看

ll

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-6a5d4dfe7cd2347d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 总结:如果文件比较多的话,使用 * 通配符这种方式就会比较的慢,这个时候就需要在本地将需要复制的文件压缩成一个包,将这个包复制到服务器上,然后再在服务器上解压
  3. 3. samba
  4. > Linux 装了这个软件之后就可以像比如在 windows 系统下 两个 windows 电脑,在我的邻居中找到对方电脑的目录之后在两台电脑之间操作,这样的去操作文件了
  5. > samba 本身用的网络协议和 windows 下用的网络协议是兼容的
  6. 安装
  7. > 如果你的是 centos yum 命令全装,如果是 ubuntu app-get 命令
  8. 我这里用的是 centos ,在安装时提示我 `you need to be root to perform this command` 我需要在根目录下执行安装操作,这里可以将当前用户添加到root用户组中或者是 `su` 切换至 root 用户下,这里我是在 root 中安装了

yum install samba //中间会有两次选项都输入 y y y

  1. 现在虽然装好了,但是不能直接去用,需要配置,修改 samba 的配置文件(smb.conf

//在 mac、Linux或者其他操作系统下,大多数将配置文件放在了 etc 目录下 cd /etc/ cd samba/ ll //查看配置文件 vi smb.conf

  1. > smb.conf 配置文件<br />
  2. ![image.png](http://upload-images.jianshu.io/upload_images/9064013-9a1ec526dd6e61f7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br />
  3. global 全局配置<br />
  4. homes 就是你想把哪个目录共享出去,默认的都是没有配置的<br />
  5. printers 是让你共享打印机的
  6. 修改 homes 配置

//添加路径 path = /abc/bcd //授权 需要让 Linux 系统下的其他用户也可以使用这个文件共享

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-b3008e3e97cc267f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br />
  2. 权限解析:第一个字符代表这个文件属于哪个类型,后面九个字符代表这个文件的操作权限,这九个字符分了三组,三个字符为一组 rwx r-x r-x ,每一组都代表了一个权限,分别代表的是:<br />
  3. 这个文件的所有者有哪些权限<br />
  4. 和这个文件所有者在同一个用户组底下的其他用户的权限<br />
  5. 除了这个文件所有者和在其同一个用户组底下的其他用户之外的那些用户的权限<br />
  6. 每一组又有三个字符 r w x,每个字符都代表一个权限<br />
  7. rread 可读<br />
  8. wwrite 可写、可被修改、删除<br />
  9. x:执行 如果这个文件是 目录形式、脚本形式、[二进制](http://www.360doc.com/content/11/0308/14/5327079_99222581.shtml)形式 给这个 x 权限 它是可以执行的 ,如果是 txt 格式 给了也执行不了<br />
  10. 如果说对应的权限上是 - 说明没有这个对应的权限
  11. 修改 homes 配置 -> 权限

//后面的 0 是固定写法, 644 是二进制的掩码再转成十进制 6 -> 110 可读 可写 不可执行 4 -> 100 可读 不可写 不可执行 //这三个数字其中每一个都代表上面对应的三组权限中的一组权限 //6 代表 这个文件的所有者有哪些权限 //4 代表 和这个文件所有者在同一个用户组底下的其他用户的权限 //4 代表 除了这个文件所有者和在其同一个用户组底下的其他用户之外的那些用户的权限 creat mask = 0644

  1. 配置好之后 esc + : + wq ->回车 保存并关闭<br />启动 samba

//centos 7 以后 systemctl start smb //centos 7 以前 或者 ubuntu service smb start

  1. ###3. 如何实现免密登录?<br />
  2. ####这里采用的方法是用“证书”登录,前提是需要有一个证书,而且这个证书服务器要认可
  3. 1. 证书
  4. > 证书一般是一个机构统一去分发,也可以自己来生成一个证书.
  5. > 证书也有很多套路,这里采用的是公钥和私钥,有公钥就必须有私钥<br />
  6. 公钥:用在服务器上,可以随意分发,相当于是一个档案<br />
  7. 私钥:用在自己的电脑上,必须好好保存,不能泄露,相当于钥匙
  8. 公钥和私钥的机制
  9. > 它们合起来就是一个密钥对,这个密钥对在密码学里面叫做不对称加密,加密的时候用公钥去加密,解密的时候用私钥去解密,加密方法和解密方式是两种完全不同的方式这就叫不对称加密,如果要免密登录就是需要用密钥对来实现
  10. 如何生成密钥对?
  11. > 生成必须在 MAC 或者 Linux 系统下,Windows 下如果想要生成可以通过其他系统生成之后拿来使用或者下载终端软件生成,我这里使用的是在 windows 下的 Cmder 软件,先在桌面建一个文件夹 存放密钥对

cd Desktop mkdir text_key cd test_key

  1. 下面是生成命令 敲完命令后面的回车就可以了

//-t 是生成密钥对时用哪种加密算法 一般用的是 rsa //后面可以加一些个性化的设置 //-C 后面是你的名字 要加双引号 //-f 后面写的是生成的这个密钥对的名字 “” 如果不写的话就是默认的 ssh-keygen -t rsa -C “hero” -f “test_key”

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-b2ad23c1aaeed744.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 使用 `ls` 命令查看是否生成成功了
  3. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-573d6ea3bad84c34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  4. 如何使用秘钥?
  5. > 登录之前需要把秘钥(公钥)传到服务器上
  6. 在服务器端切换到 root 用户下,在 ~(root)目录下找到一个 .ssh 目录(它是一个隐藏目录),查找时需要用 下面的命令,这样就找到了 .ssh 目录 这个目录就是服务器端存放秘钥的位置

ll -a

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-72949bfc5a696a6b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

//进入 .ssh 目录下 cd .ssh ll

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-1616a65e3467b321.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 这个时候需要将生成的本地秘钥(公钥)传到服务器上的 .ssh 目录下,在Cmder 中敲如下命令,便可以上传成功了

scp ./test_key.pub root@192.168.xx.xx:/root/.ssh

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-3c406fa2dc6efae1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 此时可以在服务器上查看是否成功

ll

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-2793e9f7efaa6150.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 接下来还需要在服务器中将公钥的内容导入至系统配置文件中 这个配置文件默认是没有的,如果下次更改的话还是讲公钥内容导入这个文件中

//下面是组合命令 > 是将前面 cat 到的文件内容原封不动的追加到后面文件内容的末尾 //authorized_keys 里面存放的就是公钥 cat test_key.pub > authorized_keys //生成之后 查看 ls //并查看公钥内容 cat authorized_keys

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-eb641f03987d5cb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. 接下来是使用私钥
  3. > 首先要注意在使用私钥的时候,对私钥的权限是有限制的<br />
  4. 必须是你自己才可以操作的,其他人是不可以的<br />
  5. ![image.png](http://upload-images.jianshu.io/upload_images/9064013-af9019a98e321c27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  6. > 其次是将私钥复制到本机,也就是现在你使用的计算机的 .ssh 目录中

//首先找到本机的 .ssh 目录 cd ~/.ssh //查看当前目录 ls //将 test_key 目录下的 test_key 私钥文件复制到 .ssh 当前目录下 cp C:\Users\yourame\Desktop\test_key\test_key ./ //再次查看是否成功 ls

  1. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-74c3856da4d941ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  2. #####友情提示:这里使用 Cmder 是无法实现免密登录的,上面的实现步骤均需要在 MAC 或者 Linux 环境下,windows 下需要使用 Xshell 终端软件,详情请移步[前端工程化预备知识(上)](http://www.jianshu.com/p/d63bd8ca8cc8)<br />##补加: ubuntu 下的坑<br />
  3. 后面在 ubuntu 下还是遇到了一个问题,在这里写下来避免别的人踩坑,需要注意的是 ubuntu 下的命令和上文中的 centos 还是有很大的差异的,具体命令可以自行百度<br />
  4. ubuntu 默认安装之后是没有 ssh 服务的需要自行安装,不然其他的终端使用 ssh 是无法连接上去的<br />
  5. 先查看 ssh 服务是否处于运行状态

ps -e | grep sshd

  1. 命令行中如果是下图这样的没有任何的输出的话,就说明你的 ssh 服务没有启动,这个时候就需要安装 ssh 服务了
  2. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-c0eaf42664ed52e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  3. 安装命令,安装中途会有一个提示 输入 `y` 即可,安装过程需要等待一会儿

sudo apt-get install openssh-server y

  1. 上面的安装命令完后之后,再去查看 ssh 服务是否处于运行状态

ps -e | gerp sshd

  1. 这个时候显示如下就证明安装成功并启动了
  2. > ![image.png](http://upload-images.jianshu.io/upload_images/9064013-74a2ae5b96b790a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  3. 下面是启动 ssh 服务的两种命令

//启动 sudo /etc/init.d/ssh start //重启 sudo /etc/init.d/ssh resart

  1. 启动之后在你的客户端就可以使用 `ssh` 进行远程登录了

ssh xiaochuan@192.168.x.x yes Enter your password

``` 下图便是已经登录成功了

image.png