1.远程服务概念说明
ssh: 远程安全连接 22 互联网服务器 可以默认root用户远程登录
telnet:远程连接 23 网络设备连接 机房局域网中 不可以使用root远程登录
2.远程连接服务原理
(1).客户端 -- 服务端 请求建立远程连接
(2).服务端 -- 客户端 确认连接信息
(3).客户端 -- 服务端 确认连接
(4).服务端 -- 客户端 发送公钥信息 确认密码信息
(5)客户端 -- 服务端 接受公钥并保存(~/.ssh/known_hosts)并且输入密码信息
(6).服务端 -- 客户端 确认密码输入正确
后续数据传输过程:客户端公钥加密 -- 服务端私钥解密
私钥和公钥:对传输的数据进行加密处理
2.远程服务连接方式
基于密码连接方式:密码复杂度
基于秘钥远程连接方式:
第一步:管理端 分发公钥信息
创建秘钥
[root@m01 ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
/root/.ssh/id_dsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:0aUC8VWiUdeezRtfl1runHRYU+dNPTxefKbkDFfvCNw root@m01
The key's randomart image is:
+---[DSA 1024]----+
| o...+.+..oo|
| o = *..++@|
| = o oBEO@|
| o .*OO|
| S =oO|
| ..+o|
| + o|
| + |
| |
+----[SHA256]-----+
第二步:管理端 分发公钥信息
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.1.7's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.7'"
and check to make sure that only the key(s) you wanted were added.
管理主机: 10.0.0.61/172.16.1.61
被管理主机: 172.16.1.31 172.16.1.41 172.16.1.7
** 如何批量分发秘钥:**
ssh-copy-id 命令原理
01.ssh和远程主机连接
02.将公钥文件传送到远程主机,/root/.ssh
将公钥内容保存到 /root/.ssh/authorized_keys(600)
3.连接建立时,ssh服务会加载到authorized_keys
,实现基于秘钥连接通讯
利用脚本如何批量分发:
01.需要输入确认信息
ssh -o StrictHostKeyChecking=no 172.16.1.31
02.需要输入密码信息
yum install -y sshpass
[root@m01 scripts]# sshpass -p654321 ssh 172.16.1.31
批量分发秘钥脚本:
vim /server/scripts/fenfa_pub.sh
#!/bin/bach
./etc/init.d/fouctions
for ip in {7,31,41}
do
echo "================172.16.1.$ip start fenfa key============"
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no 172.16.1.$ip &>/dev/null
if [ $? -eq 0 ]
then
echo "公钥分发成功" /bin/true
echo ""
else
echo "公钥分发失败" /bin/false
echo ""
fi
done
分发结果:
[root@nfs01 /server/scripts]# sh fenfa_key.sh
fenfa_key.sh: line 2: ./etc/init.d/fouctions: No such file or directory
================172.16.1.7 start fenfa key============
公钥分发成功 /bin/true
================172.16.1.31 start fenfa key============
公钥分发成功 /bin/true
================172.16.1.41 start fenfa key============
公钥分发成功 /bin/true
检查秘钥分发脚本:
#!/bin/bash
if [ $# -ne 1 ]
then
echo "usage: 请在执行脚本后面输入一个合法命令,命令之间有空格,请用双引号括起来"
exit 2
fi
cmd="$1"
for ip in {7,31,41}
do
echo "=================check 172.16.1.$ip================="
ssh 172.16.1.$ip $cmd
echo ""
done
=================check 172.16.1.7=================
web01
=================check 172.16.1.31=================
nfs01
=================check 172.16.1.41=================
backup
批量分发脚本问题:
01.执行脚本出现错误
02.将脚本中的命令单独在命令行中执行
sshpass没有安装成功
手动指定命令分发
ssh-copy-id -i /root/.ssh/id_dsa.pub
输入yes 输入密码
检查:/var/log/secure文件
如果一台主机远程服务端口号改动了,如何再分发公钥?
多台主机 ssh连接信息不一致
172.16.1.31 22 密码 654321
172.16.1.41 22 密码 123456
172.16.1.7 52113 密码 654321
shell: 数组概念
第一个历程: 编辑一个主机连接文件
cat >> /server/scripts/host_info.txt <<EOF
172.16.1.31 22 654321
172.16.1.41 22 123456
172.16.1.7 52113 654321
EOF
第二个历程: 调取文件中信息
cat /server/scripts/host_info.txt|\
while read line
do
IP_info="$(echo $line|awk '{print $1}')"
Port_info="$(echo $line|awk '{print $2}')" Pass_info="$(echo $line|awk '{print $3}')"
echo $IP_info $Port_info $Pass_info
done
第三个历程: 编写脚本:
[root@m01 scripts]# vim fenfa_key.sh
#!/bin/bash
. /etc/init.d/functions
cat /server/scripts/host_info.txt|\
while read line
do
IP_info="$(echo $line|awk '{print $1}')"
Port_info="$(echo $line|awk '{print $2}')"
Pass_info="$(echo $line|awk '{print $3}')"
echo "====================$IP_info start fenfa key===================="
sshpass -p$Pass_info ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no $IP_info -p $Port_info &>/dev/null
if [ $? -eq 0 ]
then
echo "公钥分发成功" /bin/true
echo ""
else
echo "公钥分发失败" /bin/false
echo ""
fi
done
远程服务配置文件:
17 #Port 52113
19 #ListenAddress 0.0.0.0
PS: 监听的地址只能是本地主机网卡上有的地址 web服务 负载均衡 ******
20 #PermitEmptyPasswords no --- 不允许空密码连接主机
21 #PermitRootLogin yes --- 禁止root用户远程连接 no
22 GSSAPIAuthentication no --- 关闭GSSAPI认证 加快SSH连接效率
23 UseDNS no --- 关闭DNS反向解析 加快SSH连接效率
PS: 在SSH服务配置文件, 很多注释的信息不是没有作用, 表示的是默认配置
SSH远程连接服务进程
root 7223 1 0 12:54 ? 00:00:00 /usr/sbin/sshd -D 远程连接服务进程(实现客户端远程连接)
root 7683 7223 0 15:18 ? 00:00:00 sshd: root@pts/0 远程连接会话进程(维持连接会话)
网友评论