赞
踩
ssh服务-----软件包(openssh-server)
ssh: secure shell, protocol, 22/tcp, 安全的远程登录
具体的软件实现:
OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
两种方式的用户登录认证:
基于password
基于key
ssh加密通讯
基于用户名口令登录验证
Openssh软件组成
Openssh 公共包
Openssh-clients 客户端包 ssh_config
Openssh-server 服务器包 sshd_config
工具:
基于C/S结构
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, putty, securecrt, sshsecureshellclient
Server: sshd
安全远程登录----比telnet安全
第一次连接有风险
Ssh安全性—防止中间人攻击
假如有两个机器的ip和mac完全一样,第一次用ssh登录后,第二次登陆会出现警告,只要将/root/.sh/know_hosts删掉,就不会出现错误
第一次登录的目的就是将对方的公钥放到/root/.ssh/know_hosts
文件中去
本机公钥在/etc/ssh/ssh_host_rsa_key.pub
中
所以说将/root/.shh/know_hosts删掉,就会认为是第一次登录
SSH默认走22端口
客户端组件:
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no
首次登录不显示检查提示
或者ssh -o “StrictHostKeyChecking no” IP
默认端口号----可以修改(修改完得重启服务service sshd restart)
远程登录要用-p
指定新的端口号
格式:ssh [user@]host [COMMAND]
如果不写user默认以当前身份登录
ssh [-l user] host
[COMMAND]
ssh命令常见选项
-p port:远程服务器监听的端口(指定端口号)
-b:指定连接的源IP(登录时,指定用哪个ip连接)
-v:调试模式
-C:压缩方式(网络比较远)
-X:支持x11转发(抓取图形页面)否则显示不了图片(依赖于xserver服务)
-t:强制伪tty分配(如果一组机器是单向连接)
ssh -v root@IP -v显示详细信息
ssh -n root@IP -n支持远程启动后台程序
-X例如centos6上的xclock
如果一组机器是单向连接(A–>B—C)而C拒绝A
-t(只要不是最后一个机器都加-t)
ssh -t host1 ssh -t host2 ssh host3
host3最后认为是host2在连接
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub
(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的
~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
ssh服务登录验证方式
用户/口令
基于密钥
基于用户和口令登录验证
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,
则用户登录成功
基于密钥的登录方式
1 首先在客户端生成一对密钥(对于用户)(ssh-keygen)
2 并将客户端的公钥ssh-copy-id 拷贝到服务端
3 当客户端再次发送一个连接请求,包括ip、用户名
4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:magedu
5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
(生成密匙,传输公钥到服务器得自己作)其他的是ssh协议完成
基于密钥的认证:
(1) 在客户端生成密钥对
-t 指定加密算法(默认不写—rsa算法)
-f 输出的key路径
-P 提供口令
ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
(2) 把公钥文件传输至远程服务器对应用户的家目录.ssh/authorized_keys
(这里如果将私钥传输–也不会影响,他还是会把公钥给你传输过去)
-i 指定公钥文件
ssh-copy-id [-i [identity_file]] [user@]host
ssh-copy-id -i /home/lizi/.ssh/id_rsa.pub root@192.168.245.128
(3) 测试
再去连接,拷文件对方就不用输入密码
因为scp就是走的ssh服务
也可以直接执行命令
(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令:
-f 可以指定自己的私钥文件(如果文件路径正确可以不加)
ssh-keygen –p
这样用到私钥文件就得输入私钥口令
这样就相当于
(原本操作:登录多个主机需要输入多个不同的口令)
(而现在:只用输入一个私钥的口令就可以)
(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户,
否则运行
ssh-agent bash
启用代理
ssh-add
将口令托管给代理
这样代理程序就接管了输入密匙口令
(每一次登录需要启用一次代理)否则代理就不启动
切用户su - lizi
1.生成自己的秘钥对(默认是rsa算法, 可以 -t指定加密算法)
ssh-genkey
生成一个私钥,和公钥文件
将公钥传输至远程服务器对应用户的家目录
用root传输
ssh-copy-id -i /home/lizi/.ssh/id_rsa.pub root@192.168.245.128
然后:再去连接,拷文件对方就不用输入密码
也可以直接执行命令
设置好之后只能在lizi用户下以root身份连接
如果以root账户的key有ssh认证
那么在lizi用户下,连接服务器,还得输入密码
给一个新的主机里面创建.ssh/文件
然后将root的私钥复制过去
然后冒充(结果成功)
说明用户的私钥必须保护好,不然会出大事—给私钥加口令
基于key的expect脚本
**堡垒机:**私钥公钥配好,要能实现key验证,将他的公钥复制到其他机器上去
编一个脚本
-t 指定加密算法(默认不写---rsa算法)
-f 输出的key路径
-P 提供口令
hosts.txt文件中存放其他机器的ip
将ssh-copy-id 传送给自己
然后将这个文件复制到其他主机
相当于所有人共用一套 (公私钥)
下一步—下一步
下一步
然后将导出的文件扔到linux中
将这个文件的内容覆盖重定向到authorized_keys
以前是基于用户密码验证,现在是基于pubkey验证
这样就会直接连接上去
若对方的root更改---------------不影响
可以把这个私钥文件放到U盘上(随身携带)
文件传输
scp [options] SRC… DEST/
常用选项:
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口
两种方式:
前面是源 后面是目标
将目标主机的内容拷贝到,本目录
scp [options] [user@]host:/sourcefile /destpath
将本机的内容拷贝到
scp [options] /sourcefile [user@]host:/destpath
scp 源文件 user@ip 目标目录
可以实现跨网络通信
scp命令如果重复拷贝相同文件----浪费带宽—用rsync命令解决
比scp更快,只复制不同的文件
用于同步备份数据
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
常用选项:
-n 模拟复制过程—假装
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
一般用-av
组合选项
• rsync -av /etc server1:/tmp
复制目录和目录下文件
• rsync -av /etc/ server1:/tmp
只复制目录下文件
写计划任务 (每十分钟—执行一次)
crontab -e
* */10 * * * /date/shell/rsync.sh
交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
sftp [user@]host
sftp> help
用于本机–和服务器端文件传输
命令 服务器端
!命令
(当前客户端本机上执行的命令)
get 获取(下载到客户端)
put 上传到远程服务器
退出exit或者bye
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。