ssh服务为web生产服务器保驾护航

场景

我们给自己的博客搭建一个站点,配置lnmp/lamp运行环境可以跑起来,差不多就完事了。但是当我们做的是一个中型或者大型项目,在它需要部署到生产服务器上线运营时,账户安全方面需要做些什么?

ssh

安装

apt-get install openssh-server

启动

/etc/init.d/ssh start 

使用

ssh  [email protected]

//ssh远程连接服务器,需要输入用户密码

应用

主机名管理

一个中型甚至大型的的项目,往往需要对多台服务器进行管理,如生产服务器,测试服务器,管理服务器等等。因此需要对每一台服务器的主机名进行管理,通过修改各个服务器的/etc/hostname文件修改本地系统名,重启可以看到。

密钥ssh登录

linux或Mac下生成密钥的命令是ssh-keygen -t rsa默认生成路径在家目录的.ssh目录下。id_rsa 文件保存的是本机的私钥,id_rsa.pub文件保存的是公钥。

ifconfig命令查看服务器的IP地址,注意如果你是用的是阿里云ECS,此处查看到的是内网IP而非公网IP。

在被登录的服务器的家目录下的.ssh目录(如果不存在就创建一个)创建一个authorized_keys 文件,并将生成的公钥文件的内容放到里面,就可以在本地使用密钥登陆这台服务器了。

ssh  [email protected]

//此时不需要输入用户名密码

如果我们关闭密码登陆,转而使用ssh密钥登录,更可以确保服务安全(注意:关闭密码登陆前,一定要确保能够正常使用ssh密钥登陆)。

关闭密码登陆

找到/etc/ssh/sshd_config 修改PasswordAuthentication 属性 yes。

在第52行,yes改为no,禁用密码登陆(慎用)。

详细实战分析

线上:阿里云ECS云服务器 Ubuntu14.04lts

Manager服务器生成ssh密钥

ssh-keygen -t rsa  //一路回车

生成的密钥保存在家目录下,进入.ssh目录下,

ls//查看文件

id_rsa id_rsa.pub know_hosts

Manager服务器上在 /etc/hosts 文件里加上重定向的名字,如测试服务器,DB服务器和Manager服务器分别起一个重定向名字便于管理多台web服务器。

修改本地定向网络ip(阿里云的内网ip)的文件

vi /etc/hosts

//写入 10.162.48.184 FWEB1

//每次在终端输入‘FWEB1’,就代表‘10.162.48.184’。

在mannager服务器上,试一下ssh登录web1服务器

ssh root@FWEB1 

退出

exit

在mannager服务器上,试一下文件上传web1服务器

scp  ./id_rsa.pub root@FWEB1:/root

现在还是需要输入密码,不过等一会把密钥加到web服务器上,再从manager登录web服务器,就不需要输入密码了。

在web1服务器,家目录下创建.ssh目录

ssh root@FWEB1 // 输入密码

mkdir ~/.ssh

在web1服务器,把id_rsa.pub传递到.ssh/目录下

cat id_rsa.pub >> .ssh/id_rsa.pub

此时,再从id_rsa.pub设置到web服务器(FWEB1)本地.

文件改名

mv id_rsa.pub authorized_keys

给执行权限

chmod 600 ./authorized_keys

退出ssh远程登录

exit

此时回到manager服务器

ssh  root@FWEB1

//此时密码不用输就可以进入FWEB1

随便上传个文件,试试

scp know_hosts root@FWEB1:/tmp/

此后,在manager服务器向web服务器,scp传送东西,不需要再输入密码了。

原理:manager服务器私钥自己留着,把公钥给所有的web,DB,备份服务器,就可以便捷管理了。

关闭web服务器的密码登陆

找到/etc/ssh/sshd_config 修改PasswordAuthentication 属性 yes。在第52行,yes改为no,禁用密码登陆。

修改sshd_config文件中ssh端口,ssh端口默认为 22. 把端口号改为1000以上的数值。

默认:Port:22

改为:Port 1678

:wq //退出vi编辑器。

reboot //重启生效

ssh登录目的服务器命令

root@FWEB1

有点麻烦?可以创建自己的别名

vi ~/.bash_profile

//写入  alias fewb1='ssh root@FWEB1 -p 1678'

//(-p 为端口号)

好,:wq 保存退出。

使他生效

source .bash_profile

查看别名

alias

在manager服务器下,把某个文件夹下全部文件推送到web服务器。

scp -p 1678 ./* root@FWEB1:/tmp/ ~~~~

//(需要被传送文件的web服务器有这个文件夹)

把服务器其上的东西上传上去,是这样写, 把web服务器的东西下载到本地,只要把这俩目录倒过来,就可以了。

技巧:

cd ~

mkdir sh

vi pushcode.sh

//在这里写shell脚本

shell脚本的写法,开头‘#!’,后面是 shell可执行命令的位置。

#!/bin/sh

scp -p 1678 ./var/www.machuang.name/* root@FWEB1:/var/www/machuang.name

好!:wq 保存推出。

给执行权限

chmod 755 /root/sh/pushcode.sh

Ls查看下

ls /root/sh

此时看到pushcode.sh变成绿色,就对了。以后敲入这段命令,就可以完成上传代码的功能了。

/root/sh/pushcode.sh

就可以执行脚本内的命令了,此时再加一个别名。

cd ~

vi .bash_profile

//写入  alias pushcode='/root/sh/pushcode.sh'

//:wq 保存退出

好,使它生效,否则要重启才能生效。

source .bash_profile

上传代码:

pushcode

这样一个具备业务逻辑的ssh服务使用就展现在你面前了,单一的使用一个工具并不显得立体,多种linux软件和命令有机结合在一起才能迸发出更大的能量。

欢迎star

我写的一本电子书,总结开发经验,完善知识体系,欢迎各位大佬订阅收藏。

https://www.kancloud.cn/martist/ma_zhao_liu

你可能感兴趣的:(ssh服务为web生产服务器保驾护航)