关于ssh服务

来源:互联网 发布:刘国梁事件真相知乎 编辑:程序博客网 时间:2024/06/08 10:54

SSH介绍

ssh: secure shell, protocol, 22/tcp, 安全的远程登录

具体的软件实现
OpenSSH: ssh 协议的开源实现,CentOS 默认安装
dropbear :另一个开源实现

SSH 协议版本

v1: 基于CRC-32 做MAC ,不安全;man-in-middle
v2:双方主机协议选择安全的MAC 方式

基于DH 算法做密钥交换,基于RSA 或DSA 实现身份认证

两种方式的用户登录认证:

1、基于password
2、基于key

Openssh

OpenSSH 介绍

相关包
openssh
openssh-clients
openssh-server

工具

基于C/S 结构
Client: ssh, scp, sftp ,slogin
Windows 客户端:

xshell,putty,securecrt, sshsecureshellclient
Server: sshd

ssh客户端

客户端组件

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

允许实现对远程系统经验证地加密安全访问

当用户远程连接ssh 服务器时,会复制ssh 服务器/etc/ssh/ssh_host*key.pub (CentOS7
默认是ssh_host_ecdsa_key.pub )文件中的公钥到客户机的~./ssh/know_hosts
中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接。

ssh服务登录验证

ssh 服务登录验证方式

用户/口令
基于密钥

基于用户和口令登录验证

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

Created with Raphaël 2.1.0基于用户名口令建立的过程客户端客户端服务端服务端1.客户端想服务端发起ssh请求2.服务端收到请求,发送公钥给客户端3.客户端输入用户名密码通过公钥加密,回传给服务端4.服务端通过私钥解密得到用户的密码和本地进行对比,验证成功,允许登陆,负否则再次验证

基于密钥的登录方式

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

Created with Raphaël 2.1.0基于密钥建立的过程客户端公钥私钥客户端公钥私钥服务端S公钥authorized_keys服务端S公钥authorized_keys1.首先在C上生成对密钥 2.将公钥拷贝给S一份并重命名为nauthorized_keys3.C向S发送一个连接请求,信息包括IP、用户名4.S得到C的信息后会到nauthorized_keys中查找,如果有响应的IP和用户名,S会随机生成一个字符串;例如;qwer6.得到S发来的消息后,C会使用私钥进行解密,然后将解密后的字符串发送给S5.客户端输入用户名密码通过公钥加密,回传给服务端7.接收到解密后的字符串会跟先前生成的字符串进行对比,如果一致,就允许面密码登陆

基于key认证

原理

基于密钥的登录方式:

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

详细步骤:

基于密钥的认证:

(1) 在客户端生成密钥对

教程:

ssh-keygen -t rsa [-P ”] [-f “~/.ssh/id_rsa”]

(2) 把公钥文件传输至远程服务器对应用户的家目录

ssh-copy-id [-i [identity_file]] [user@]host

(3) 测试

(4) 在SecureCRT 或Xshell 实现基于key 验证

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

(5) 重设私钥口令

ssh-keygen –p

(6) 验证代理(authentication agent )保密解密后的密钥

• 这样口令就只需要输入一次
• 在 在GNOME 中,代理被自动提供给root 用户
• 否则运行ssh-agent bash

(7) 钥匙通过命令添加给代理

ssh-add

我的过程

(1) 在客户端生成密钥对

    [root@C6R1 ~]#ssh-keygen -t rsa -P '' -f  .ssh/id_rsa    Generating public/private rsa key pair.    Your identification has been saved in .ssh/id_rsa.    Your public key has been saved in .ssh/id_rsa.pub.    The key fingerprint is:    0e:f3:41:d6:79:b2:a6:35:98:26:23:c0:cc:ae:0c:e1 root@C6R1    The key's randomart image is:    +--[ RSA 2048]----+    |                 |    | +       . .     |    |. =     o + .    |    |.o .   o o +     |    |.E. . = S =      |    |o.   . O = .     |    |..      +        |    |                 |    |                 |    +-----------------+    [root@C6R1 ~]#cd .ssh/    [root@C6R1 .ssh]#ls    id_rsa  id_rsa.pub  known_hosts    #id_rsa 私钥文件   id_rsa.pub 公钥文件  known_hosts ssh连接的key

(2) 把公钥文件传输至远程服务器对应用户的家目录

[root@C6R1 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.18.13.62

.ssh/id_rsa.pub 把公钥文件传给对方主机,
就算写的是私钥文件也只会传给对方私钥文件。
注:私钥文件一定一定一定要保护好。
一般都加口令:ssh-keygen -p
再输入你想设置的密码
等会登陆的时候会验证私钥口令
只需输入一次即可,并且如果批
量管理的话口令都是一样的。
下文会介绍。

(3) 测试

ssh 172.18.13.62 #ssh 对方的IP,并且不需要输入用户名、密码

(4) 在SecureCRT 或Xshell 实现基于key 验证

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

(5) 重设私钥口令 :

ssh-keygen –p

(6) 验证代理(authentication agent )保密解密后的密钥

• 这样口令就只需要输入一次
• 在 在GNOME 中,代理被自动提供给root 用户
• 否则运行ssh-agent bash

(7) 钥匙通过命令添加给代理

ssh-agent bash
#启动代理
ssh-add
#代理是只有启动了才有效,注销或者重启,代理会需要再次输入密码。

原创粉丝点击