ssh服务

Posted 莫孟林

tags:

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

一、openssh简介

1、ssh(secure shell protocol)基于tcp协议下的22端口, 安全的远程登录

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

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

3、openssh基于C/S结构,Client: ssh, scp, sftp,slogin,xshell, putty, securecrt, sshsecureshellclient;Serve:sshd

4、客户端配置文件:/etc/ssh/ssh_config;服务端配置文件:/etc/ssh/sshd_config

5、客户端的使用格式

ssh [[email protected]]host [COMMAND]
ssh [-l user] host [COMMAND]

-p port:远程服务器监听的端口
-b:指定连接的源IP(客户端有多个ip地址,指定使用哪个ip去连接)
-v:调试模式(可用于排错)
-C:压缩方式
-X: 支持x11转发
-Y:支持信任x11转发
ForwardX11Trusted yes
-t: 强制伪tty分配(跳板机)
ssh -t remoteserver1 ssh remoteserver2

6、允许实现对远程系统经验证地加密安全访问,当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接。

7、 基于用户和口令的登录验证方式的连接过程

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

8、基于密钥的登录方式

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

二、基于用户名密码的验证方式的方式登录Linux主机

我们使用三台Linux服务器做实验

1、使用ssh登录主机
[[email protected] ~]# ssh [email protected]
[email protected]‘s password: 
Last login: Tue Jan  9 09:10:07 2018 from 172.18.101.180


2、使用指定接口登录ssh主机
[[email protected] ~]# ssh -b 172.18.30.253 172.18.30.254    
[email protected]‘s password: 
Last login: Tue Jan  9 08:22:24 2018 from 172.18.101.180
指定使用172.18.30.253来连接host2

 

3、通过跳板机进行连接(角色分配:cent7 172.18.30.253/16 作为客户端;cent6 172.18.30.254/16 作为跳板机,gentoo 172.18.30.100/16 作为服务器来操作)
[[email protected] ~]# ssh -t 172.18.30.254 ssh 172.18.30.100
[email protected]‘s password: 
The authenticity of host ‘172.18.30.100 (172.18.30.100)‘ can‘t be established.
RSA key fingerprint is b6:48:a5:b0:b8:ff:e1:f8:1d:99:27:86:c5:a4:c3:34.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘172.18.30.100‘ (RSA) to the list of known hosts.
Password: 
joker ~ # 

通过伪终端登录,目标主机显示连接的foreign ip地址是跳板机。

我们在getoo上看一下实际的socket3
joker /etc/ssh # ss
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
tcp    ESTAB      0      0      172.18.30.100:ssh                  172.18.30.254:40646        #centos6的地址          
tcp    ESTAB      0      0      172.18.30.100:ssh                  172.18.101.180:50821                
joker /etc/ssh #

三、基于key验证登录Linux主机

1、生成自己的公私钥(对客户端操作,我现在登录的是gentoo)
joker /etc/ssh # ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory ‘/root/.ssh‘.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:u7zpUjmNV3zx4XLTbplpZYc7tMmLvt4e2XZ3Vasspkk [email protected]er
The key‘s randomart image is:
+---[RSA 2048]----+
|                 |
|              .. |
|           .  .++|
|            o.++O|
|        S+ . +oBO|
|        =.o . BB+|
|       ..E o +++*|
|      ...o+ o..o+|
|       o*+ o+oo  |
+----[SHA256]-----+

系统默认会在/root/.ssh/下生成id_rsa(私钥) 、id_rsa.pub(公钥),后续如果希望对私钥加密,则输入密码,不想加密则一路回车。

2、将生成的公钥文件内容拷贝到目标server的/root/.ssh/authorized_keys这个文件中,可使用ssh-copy-id命令,避免拷贝错钥匙

joker /etc/ssh # ssh-copy-id 172.18.30.253
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host ‘172.18.30.253 (172.18.30.253)‘ can‘t be established.
ECDSA key fingerprint is SHA256:cJiwhG4qYrpipaouDkuKIxxLnszvnEZkR8mad+EWfsU.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]‘s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ‘172.18.30.253‘"
and check to make sure that only the key(s) you wanted were added.

现在我们将gentoo的公钥成功拷贝到了centos7上,现在使用ssh来连接centos7
joker /etc/ssh # ssh 172.18.30.253
Last login: Tue Jan  9 09:10:16 2018 from 172.18.30.253
[[email protected] ~]# 

直接免密登录了

使用CRT生成公私钥,如下图 ,选择Create Public Key

技术分享图片

一路下一步,最后选择将key保存到当前用的家目录

技术分享图片

秘钥生成好了,但是有一个问题,那就是CRT的秘钥文件格式和openssh的秘钥文件格式不一样,我们需要将其转化才可以使用。

第一步:
我们可以通过服务器端执行
ssh-keygen -i -f Identity.pub >> ~/.ssh/authorized_keys
将秘钥格式转换成openssh的格式,并将公钥导入到~/.ssh/authorized_keys 这个文件中(Identify.pub公钥需要实现拷贝到server端上)

第二步:
将生成私钥文件导入到CRT中

技术分享图片

将私钥文件导入

可以使用key来访问server了

四、ssh托管工具

我们在生成私钥文件时,有时由于私钥的重要性,我们会在生成私钥时对其进行对称加密,那么当我们在使用key认证登录的时候,需要输入私钥的秘钥才可以,而且是每次使用每次都需要输入,对我们的工作带来了不便,这时候我们可以开启代理托管工具,来实现只输入一次秘钥,就可以登录,但是这个功能只能在当前终端生效,退出终端则会失效。

命令:

ssh-agent bash   开始代理
ssh-add                将私钥密码加入

使用代理之后,我们可以对一些基于ssh的自动化软件,放一些心了。

五、openssh的优化

修改/etc/ssh/sshd_config 文件中的选项为下面的样式

UseDNS  no                               #将链接地址解析成域名,我们也用不到,会降低ssh的连接速度,我们改成“no”
GSSAPIAuthentication no     #这一项认证我们用不到,且其会降低ssh的连接速度,我们改成“no”
PermitRootLogin  yes             #允许root远程登录

六、还有一些其他的ssh工具,如dropbear等。openssh还是比较常用的,在这里就不再讲其他的开源软件了,如果感兴趣可以自行搜索相关文档。


























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

markdown 在Intel Nuc上设置Ubuntu Web服务器,步骤和代码片段

ssh怎么把本地的文件上传到服务器

golang代码片段(摘抄)

ForegroundService没有从片段开始?

通过DockerFile创建tomcat+ssh服务镜像

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段