SSH用法

一、SSH简介

SSH是最常用的远程安全登陆协议,具体的软件实现有:

  • OpenSSH: ssh协议的开源实现,CentOS默认安装
  • dropbear:一个轻量级的开源实现

SSH协议版本:

  • v1:基于CRC-32做MAC,不安全;man-in-middle
  • v2:基于DH算法做密钥交换,基于RSA或DSA实现身份认证

SSH常用的两种用户登认证

  • 基于password
  • 基于key

二、OpenSSH软件

1、OpenSSH介绍

  • 相关软件包由openssh、openssh-client、openssh-server组成
  • 基于C/S结构
  • Linux client: ssh, scp, sftp,slogin
  • Windows客户端:xshell, putty, securecrt, sshsecureshellclient
  • 服务端:sshd服务 systemctl status sshd.service

2、ssh客户端

  • 配置文件:/etc/ssh/ssh_config
  • Host PATTERN StrictHostKeyChecking no 首次登录不显示检查提示

  • 格式:ssh [user@]host [COMMAND]
    ssh [-l user] host [COMMAND]
    -p port:远程服务器监听的端口
    -b:指定连接的源IP
    -v:调试模式
    -C:压缩方式
    -X: 支持x11转发
    -Y:支持信任x11转发
    ForwardX11Trusted yes
    -t: 强制伪tty分配
    ssh -t remoteserver1 ssh remoteserver2

3、ssh服务用户和口令登录验证

  • 客户端发起ssh请求,服务器会把自己的公钥发送给用户
  • 用户会根据服务器发来的公钥对密码进行加密
  • 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

4、ssh服务基于密钥登录验证

  • 首先在客户端生成一对密钥(ssh-keygen)
  • 并将客户端的公钥ssh-copy-id 拷贝到服务端
  • 当客户端再次发送一个连接请求,包括ip、用户名
  • 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf
  • 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
  • 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
  • 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

 

注意: 基于key验证,私钥的保存特别关键,可以用ssh-keygen -p加口令验证,此时ssh对方主机时输入的口令是私钥的口令,而不是对方服务器口令

 

三、实验

1、实验一:多台服务器之间都基于key登录验证:

  •   第一种方法:

每台服务器上执行ssh-keygen

ssh-copy-id 本机IP

别的服务器执行同样的command

scp authorized_keys 到所有服务器

  • 第二种方法:

scp -pr .ssh到所有主机上,共享一个密钥。

2、实验二:批量发布脚本到所有服务器上

  • 按照实验一建立一台管理客户端到多台服务器的基于key的登录验证
  • 编写script f1.sh

#!:/bin/bash

hostname

编写ip.txt,把key通过验证的服务器IP加入

  • 执行如下的命令

for ip in $(cat ip.txt); do scp f1.sh $ip:/root/ ;done(批量copy脚本f1.sh到多台服务器)

for ip in $(cat ip.txt); do ssh $ip "/root/f1.sh" ;done(可以远程批量执行脚本)

3、实验三:脚本实现多台服务器之间的key登录验证设置

实用场景:100台机器实现key验证:

  • 编写脚本:

#!/bin/bash
rpm -q expect &> /dev/null || yum install expect -y
ssh-keygen -P "" -f "/root/.ssh/id_rsa"
password=verimatrix
while read ipaddr;do
expect <<EOF
set timeout 10
spawn ssh-copy-id $ipaddr
expect {
"yes/no" { send "yes ";exp_continue }
"password" { send "$password " }
}
expect eof
EOF
done < ip.txt

  • 把100台服务器的IP写入ip.txt

四、几个有用的命令

1、pssh批量执行

  • 前提:需要安装pssh从EPEL yum reposity,第二,主机间需要实现基于key的登陆验证方式
  • 把需要管理的服务器的ip写入ip.txt文件
  • pssh -h ip.txt  -i hostname 显示所有服务器的hostname
  • pssh -h ip.txt  -i 'useradd psshuser' 在所有服务器上新建用户psshuser
  • pssh -h ip.txt  -i 'getenforce' 显示所有服务器的Slinux策略
  • pssh -h ip.txt -o /app/test/script/psshtest  -i 'cat /etc/fstab' 在本机目录下/app/test/script/psshtest 生成以服务器IP为文件名的输出结果
  • pssh -h ip.txt 'sed -i "s/^SELINUX=.*/SELINUX=enforcing/" /etc/selinux/config' 修改所有服务器的Selinux为enable

2、PSCP.PSSH命令

pscp.pssh -h ip.txt /root/f1.sh /data/ (把)额发生过f1.sh推送到远程主机上/data是远程主机的文件夹

pssh -h ip.txt -i ”/data/f1.sh“在所有服务上执行f1.sh脚本

3、PSLURP.PSSH命令

pslurp -h ip.txt -L /app/test/script/psshtest /var/log/messages m 把ip.txt中指定的服务器的/var/log/messages复制到本机/app/test/script/psshtest目录下,执行之后会在此目录下生以ip.txt中指定的ip为名称的文件夹,同时以m的文件名字保存。

 

 

原文地址:https://www.cnblogs.com/liangjindong/p/9069390.html