ssh远程连接服务+免密

1、有哪些可提供远程登录的类型

目前远程登录主要分为文字接口图形接口

  1. 文字接口明文传输:Telnet、RSH 等为主。
  2. 文字接口加密:SSH 为主,基本已经取代 Telnet、RSH 。
  3. 图形接口:XDMCP、VNC、XRDP 等较为常见。

数据的明文传输和加密传输

明文传输:指的是网络高手用tcpdump等工具获取传输的数据包以后,可以直接看到传输的内容。
加密传输:指的是数据在传输之前进行加密处理,如果有人获取数据包,那么他看到的是加密后的乱码。

2、使用SSH服务

现在的服务器默认ssh服务是开启的,所以我们可以直接使用。特别注意的是:在默认状态下,ssh协议本身就提供两个服务器功能。

  1. 一个就是类似Telnet的远程连接使用Shell的服务器,也就是SSH
  2. 另一个就是类似FTP服务的Sftp-Server,提供更安全的FTP服务。

1、重启ssh服务:

[root@192 ~]# systemctl restart  sshd
[root@192 ~]# netstat -anpt | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1175/sshd           
tcp        0      0 192.168.91.159:22       192.168.91.1:50906      ESTABLISHED 1146/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      1175/sshd           
[root@192 ~]# 

2、使用ssh登录服务器

[root@www ~]#  ssh  [-f]  [-o 参数项目]   [-p 非正规埠口]   [账号@]IP [指令]
 选项与参数:
     -f :需要配合后面的 [指令] ,不登入远程主机直接发送一个指令过去而已;
     -o 参数项目:主要的参数项目有:ConnectTimeout=秒数 :联机等待的秒数,减少等待的时间
                               StrictHostKeyChecking=[yes|no|ask]:预设是 ask,若要让 public key 主动加入 known_hosts ,则可以设定为 no 即可。
     -p :如果你的 sshd 服务启动在非正规的埠口 (22),需使用此项目;
     [指令] :不登入远程主机,直接发送指令过去。但与 -f 意义不太相同。
 
 # 1. 直接联机登入到对方主机的方法 (以登入本机为例):
 [root@www ~]# ssh 127.0.0.1
 The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
 RSA key fingerprint is 
eb:12:07:84:b9:3b:3f:e4:ad:ba:f1:85:41:fc:18:3b.
 Are you sure you want to continue connecting (yes/no)? yes
 Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
 root@127.0.0.1's password: <==在这里输入 root 的密码即可!
 Last login: Mon Jul 25 11:36:06 2011 from 192.168.1.101
 [root@www ~]# exit <==离开这次的 ssh 联机
 # 由于 ssh 后面没有加上账号,因此预设使用当前的账号来登入远程服务器

一般使用SSH应该采用“SSH登录的账号@ip”,但是当远程登录的用户和我们正在使用的用户是同一个名称,就可以直接ssh ip

3、登录时为什么输入yes
当你第一次登录某台服务器时,他会问你是否要去连接?

  1. yes:他会把你要登录的这台服务的指纹码(公钥)写入本机的~/.ssh/known_hosts文件下面。然后让你输入密码,之后可以进入文字接口。
  2. no:直接退出。

这很烦,我不想输入或者说我用脚本执行,你让我去输入yes? 这时ssh -o 参数 会帮你解决这个问题。

 [root@www ~]# ssh -o StrictHostKeyChecking=no   root@localhost
 Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
 root@localhost's password:
 # 如上所示,不会问你 yes 或 no 啦!直接会写入 ~/.ssh/known_hosts 当
中!

我能不能在这台服务上,给另外一台下指令,然后把结果返回来给我看到。

[root@192 ~]# ssh 192.168.91.159 date
root@192.168.91.159's password: 
2022年 01月 09日 星期日 16:42:29 CST
[root@192 ~]# 

我想让给另一台服务器下指令,不用给我返回结果

[root@www ~]# ssh -f student@192.168.91.159  find / &> ~/find1.log
 # 此时你会立刻注销 192.168.91.159 ,但 find 指令会自己在远程服务器跑喔!

4、ssh ip 无法登录

这个情况有多种,我曾经遇到多两种。

  1. 提示信息,22端口破裂或者22端口被拒绝,但是可以ping通。这种情况下,可能就是地址被占用。查一下你的子网掩码时候正确。
  2. 如果服务器换ip了,那么你要重新登录时就会发生这种情况。

第二种情况做一些原因说明

第一次ssh ip 远程登录时,主机会把远程服务器的指纹码写入~/.ssh/known_hosts下,等你更换ip以后再次登录,主机核对指纹码不对,就会感觉是恶意主机,从而拒绝登录。

解决办法

  • 编辑 ~/.ssh/known_hosts 文件,找到这条记录并删除。(建议使用)

3、ssh用到的连接加密技术介绍

目前常见的网络数据包加密技术通常是“非对称秘钥加密技术”。对称加密技术和非对称加密技术主要的区别是:是否使用同一把钥匙。
非对称秘钥加密技术:主要是通过两把不一样钥匙即公钥私钥来进行加密和解密的工程。由于这两把钥匙的作用是加密数据和解密数据用的,所以在同一方向的连接中,这两把钥匙是成对的,每台服务器产生的公钥与私钥并不相同。

  • 公钥(Public Key):提供给远程主机进行数据加密的行为,也就是说,公钥谁想要我就给谁,但是你们给我发消息必须要我的公钥加密。
  • 私钥(Private Key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。由于私钥很重要,因此私钥是不能够外流的,只能保护在自己的主机上。

加密过程

ssh远程连接服务+免密

  1. 服务器建立公钥档: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host*
    的档案,若系统刚刚安装完成时,由于没有这些公钥档案, 因此 sshd 会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需
    要的私钥档;
  2. 客户端主动联机要求: 若客户端想要联机到 ssh 服务器,则需要使用适当
    的客户端程序来联机,包括 ssh, pietty 等客户端程序;
  3. 服务器传送公钥档给客户端: 接收到客户端的要求后,服务器便将第一个
    步骤取得的公钥档案传送给客户端使用 (此时应是明码传送,反正公钥本来就是
    给大家使用的!);
  4. 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥:若客户端第
    一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的
    ~/.ssh/known_hosts 。若是已经记录过该服务器的公钥数据,则客户端会去比
    对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客
    户端自己的公私钥数据;
  5. 回传客户端的公钥数据到服务器端: 用户将自己的公钥传送给服务器。此
    时服务器:『具有服务器的私钥与客户端的公钥』,而客户端则是: 『具有服
    务器的公钥以及客户端自己的私钥』,你会看到,在此次联机的服务器与客户端
    的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统喔。
  6. 开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥
    加密后送出。客户端接收后,用自己的私钥解密; (2)客户端到服务器:客户端
    传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。

4、开启telnet

node-2做升级,node-1可以登录node-2

1、先做Telnet登录,防止升级失败

node-2 安装telnet服务

yum -y install xinetd telnet-server

telnet-server是由xinetd管理,需要安装xinetd,这里启动的是telnet.socket而不是telnet.service。默认情况下,PAM 模块限制root不能telnet到 telnet-server,如果telnet 时报 Login incorrect 时,可以把下面的文件进行注释掉;
ssh远程连接服务+免密
2、启动服务

systemctl enable xinetd.server
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd.service

3、测试

[root@192 ~]# telnet 192.168.91.183 
Trying 192.168.91.183...
Connected to 192.168.91.183.
Escape character is '^]'.

Kernel 3.10.0-1160.el7.x86_64 on an x86_64
192 login: root
Password: 
Login incorrect

192 login: jiaofan
Password: 
Last login: Sun Jan  9 17:35:30 from 192.168.91.159
[jiaofan@192 ~]$ sudo sh
[sudo] jiaofan 的密码:
sh-4.2# bash
[root@192 jiaofan]#
上一篇:git使用github仓库


下一篇:【Window】Win10下Bad owner or permissions on C:\\Users\\XXX/.ssh/config的解决方法