ssh

Posted ifelz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssh相关的知识,希望对你有一定的参考价值。

ssh客户端

客户端组件
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no #首次登录不显示检查提示[默认YES]

格式:ssh [[email protected]]host [COMMAND]

ssh [-l user] host [COMMAND]
-p port:远程服务器监听的端口, ssh 192.168.6.88 -p 2222
-b 指定连接的源IP, ssh -b 192.168.6.86 192.168.6.88
-v 调试模式,显示连接过程, ssh 192.168.6.88 -v
-C 压缩方式
-X 支持x11转发[图形转发]
-Y 支持信任x11转发
> ForwardX11Trusted yes
-t 强制伪tty分配
ssh -t remoteserver1 ssh remoteserver2; ssh -t 192.168.6.88 ssh 192.168.6.90

ss -nt; ping -I eth* $ipaddr

ssh服务登录验证

1.基于用户名口令登录验证
2.基于密钥的登录方式

ssh-keygen
-t #指定加密方式, ssh-keygen -t rsa
-p #重设私钥口令, ssh-keygen -p "" -f "/root/.ssh/id_rsa" [生成空口令,并指定文件存放目录]

SecureCRT工具—>创建公钥—>生成Identity.pub文件 转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
> sh-keygen -i -f Identity.pub >> .ssh/authorized_keys

ssh-copy-id -i id_rsa.pub [email protected] #"-i"指定公钥文件[可以省略],生成密钥文件并拷贝到远程主机
> /root/.ssh/authorized_keys # -
ssh 192.168.6.88 ‘cat /etc/redhat-release‘ #远程执行命令

#[A,B,C]N台主机实现基于KEY验证

1.0 A:192.168.6.80 B:192.168.6.86 C:192.168.6.88

[ABC]:ssh-copy-id 192.168.6.80
scp /root/.ssh/authorized_keys host-"[BC]"_ip:/root/.ssh/authorized_keys

1.2在其中一台主机A上生成密钥,直接拷贝到其它主机上对应的目录即可[多台主机共同一个密钥]
A
ssh-key
ssh-copy-id host-A_ip
scp -rp /root/.ssh/authorized_keys host-"BC"_ip:/root/.ssh/authorized_keys

#验证代理(authentication agent)
> 场景:当多台主机实现KEY验证后,如A主机的私钥是加密的,远程连接需要输入私钥的密码,这种情况下就可以使用代理
1.ssh-agent bash
2.ssh-add #钥匙通过命令添加给代理,断开连接失效,需要重新启用代理[交互式会话,输入密码即可]

#脚本实例,批量实现KEY验证

‘#!/bin/bash
rpm -q expect &> /dev/null || yum install expect -y
ssh-keygen -P "" -f "/root/.ssh/id_rsa" #[生成空口令,并指定文件存放目录,避免交换]
password=centos
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‘

scp
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT:指明remote host的监听的端口

拷贝方式
scp [options] [[email protected]]host:/sourcefile /destpath
scp [options] /sourcefile [[email protected]]host:/destpath

rsync
> 基于ssh和rsh服务实现高效率的远程系统之间复制文件
> 使用安全的shell连接做为传输方式
rsync –av /etc server1:/tmp #复制目录和目录下文件
rsync –av /etc/ server1:/tmp #只复制目录下文件

> 比scp更快,只复制不同的文件[增量备份]

选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)

sftp

pssh
> pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制

? 选项如下:
--version:查看版本
-h:主机文件列表,内容格式”[[email protected]]host[:port]”
-H:主机字符串,内容格式”[[email protected]]host[:port]”
-l:登录使用的用户名
-p:并发的线程数[可选]
-o:输出的文件目录[可选]
-e:错误输入文件[可选]
-t:TIMEOUT 超时时间设置,0无限制[可选]
-O:SSH的选项
-v:详细模式
-A:手动输入密码模式
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信

#示例
pssh -H "192.168.6.80" -A -i ‘hostname‘
ipaddr="172.20.89.80 172.20.89.88"; pssh -h $ipaddr -A -i ‘hostname‘

pssh -h ipaddr.txt -o /data/ ‘hostname‘ #执行输出结果以文件存储到指定目录
pssh -h ipaddr.txt ‘sed -i "s/// " file‘ #远程批量执行命令

pscp.pssh
-v 显示复制过程
-a 复制过程中保留常规属性
-r 递归复制目录

Pslurp
-L 指定从远程主机下载到本机的存储的目录
-r 递归复制目录

pscp.pssh -h ipaddr.txt /root/src.sh /data/ #本地脚本上传到远程主机目录
pslurp -h ipaddr.txt -L /data/mes.log /var/log/messages #远程主机上的日志文件,拉取到本地

以上是关于ssh的主要内容,如果未能解决你的问题,请参考以下文章

PyCharm SSH 隧道通过本地 ssh 配置 (~/.ssh/config)

salt-ssh与ssh的区别

ssh 命令怎么用?

ssh(不是openssh) 做无密码登陆,怎么每次ssh 登陆还是要输入密码呀?

万字详解SSH(SSH登录原理+SSH配置+模拟实现SSH免密登录)

SSH服务审计工具ssh-audit