场景
我们给自己的博客搭建一个站点,配置lnmp/lamp运行环境可以跑起来,差不多就完事了。但是当我们做的是一个中型或者大型项目,在它需要部署到生产服务器上线运营时,账户安全方面需要做些什么?
ssh
安装
apt-get install openssh-server
启动
/etc/init.d/ssh start
使用
//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密钥登录,更可以确保服务安全(注意:关闭密码登陆前,一定要确保能够正常使用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