SSH用法
Posted Evan_Wolf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\\n";exp_continue }
"password" { send "$password\\n" }
}
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的文件名字保存。
以上是关于SSH用法的主要内容,如果未能解决你的问题,请参考以下文章