SSH-远程连接

2019-07-30  本文已影响0人  linux_龍

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  远程连接会话进程(维持连接会话)
上一篇下一篇

猜你喜欢

热点阅读