SSH远程登录

SSH协议

概述

  • ssh协议, 安全壳协议, 可以安全远程登录Linux主机, 专为远程登录会话和其他网络服务提供安全性的协议. openssh是ssh协议的开源免费实现

  • ssh协议客户端和服务端

    • ssh协议包括客户端和服务端
    • 客户端需要安装openssh-clients, 才能使用ssh命令登陆到其他主机, 客户端配置文件为/etc/ssh/sshd_config;
    • 服务端需要安装openssh-server, Linux安装后会默认安装该软件, 并且开启sshd服务, 服务端配置文件为/etc/ssh/ssh_config
  • 加密算法

    • 对称加密算法: 加密和解密的密钥是同一个
    • 非对称加密算法: 公钥用于加密, 私钥用于解密, 常用算法RSA

远程登陆示例

通过ssh web02命令切换到另一台服务器到底做了什么操作呢?

首先查看/etc/ssh目录, 如下

sshd_config       
ssh_host_dsa_key.pub  
ssh_host_key.pub  
ssh_host_rsa_key.pub
ssh_config  
ssh_host_dsa_key  
ssh_host_key          
ssh_host_rsa_key

openssh默认加密算法是使用RSA非对称加密算法, 安装sshd服务后, 会在etc/ssh目录下生成ssh_host_rsa_key.pub公钥和ssh_host_rsa_key私钥, 公钥用于加密, 私钥用于解密

当执行ssh web02命令, 到底发生了什么?
使用web01和web02两台机器测试下

  • web01对应ip为192.168.5.131(充当客户端)
  • web02对应ip为192.168.5.132(充当服务端)
[root@web01 .ssh]# ssh web02
The authenticity of host 'web02 (192.168.5.132)' can't be established.
RSA key fingerprint is 46:f0:2a:ce:81:72:ad:84:8f:69:e0:c5:7b:e0:bd:79.
Are you sure you want to continue connecting (yes/no)?

如果选择yes, 则会把web02的公钥(ssh_host_rsa_key.pub)追加到web01的/root/.ssh/known_host文件下, 然后输入密码, 就可以登录到web02上, known_host会追加上如下内容

web02,192.168.5.132 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtTM1HQVXDDeMABX1rtgx3AwKAIcfX/eGN4eFj3XjARyVcEqTXdjc+4/Gqdv9QTHdFsIeFrVHeyjuPLuoLAZZ1cBUmoUVp7dYdkUnX0of1CTOTO2+g1K2T4nCshh7uzL2euHAWmQ9VcXwrBeKAiO7rOuW3fiQ5kUAtLVTTow8Ewus3U7Tqim0dkc+1Fc6FXowsSTqxMEsJDJ52pZV6wjoZHkoQVETolf160CJgWelDmMiJ6sDrYSaxnD7XK7Wx4IjUkTp9OJ2jBWlOfRkdRgyIT1CBol24/JqlVI6EAxTCKemap+piCKtD7QPIPmTG5PhlHAg6pQYgTWzqJypSuA9ww==

当输入yes时, web01会保存web02的公钥, 然后使用保存的web02公钥去加密对称加密密钥, 然后web02使用非对称加密密钥解密对称加密密钥, 获取出用于对称加密的密钥, 然后web01就可以通过对称加密的密钥去加密信息, web02使用该密钥解密传输信息, 包括用户名和密码, 从而进行验证登陆, 包括后续操作, 都是使用对称加密的密钥进行操作

为什么要不使用对称加密?

  • 对称加密算法首先是客户端和服务端都要知道该密钥, 如果明文传输被截获, 将会非常危险, 所以需要使用非对称加密算法去加密该密钥

为什么不都使用非对称加密算法,

  • 非对称加密非常耗费资源

使用密钥对远程登录

如何不用输入密码, 直接使用ssh web02登录呢? 可以通过密钥对的方式实现

  • 首先使用ssh-keygen生成认证公钥和私钥
[root@web01 .ssh]# ssh-keygen 
Generating public/private rsa key pair.
# 生成密钥对位置
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:
aa:50:bf:f1:29:bc:3e:82:f6:a8:50:27:72:e0:7d:9c root@web01
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|.                |
|... . .          |
|..+.oE  S        |
| + +.. .         |
|. .. .+          |
|. oo..++ .       |
|.o..oo++o        |
+-----------------+

查看/root/.ssh/目录, 会生成出公钥id_rsa.pub和私钥id_rsa

-rw-------. 1 root root 1675 1月  21 06:48 id_rsa
-rw-r--r--. 1 root root  392 1月  21 06:48 id_rsa.pub
-rw-r--r--. 1 root root  401 1月  21 06:05 known_hosts
  • 执行命令ssh-copy-id uar@web02将web01 root生成的id_rsa.pub公钥内容追加到web02:/home/uar/.ssh/authorized_keys文件中, 查看该文件
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwbY6ICbevXjm1m5yQCVn6z5DPHx9+Wq2CJOk0lxHC5iRdn9YpNE9D27MLyK5Cf9FHv2hLxvYKwmB+9qrZvhw0I6+QeLyYtPG98LvsbKYY9JbFC72NlE4UMYiDGVj5/PMtHosViSCfAiTf3OH07Rg91o4+qFVrs8UKgOwtNUwQMCHkAdLJz6UibPvvv3oPKjVbo0qeUOfsmZ2TOIcbJdWBlighet3yP8gjylhKfgdPVcHo4dY7WoVAZ+3qGZjmXvp4oIoEpMAPNr8ksu7yxeYyjmREzxpSdACmFDC6h5U8DtjksZaC1uICGQdPtu48pQvoDY6uT3XkkDdco/KYBza+Q== root@web01
  • 当执行ssh uar@web02时, web02会用web02:/home/uar/.ssh/authorized_keys文件中保存的web01的公钥去加密一个随机数, 传递给web01, 然后web01使用私钥解密, 再传递给web02, web02比对相同, 就确定客户端可靠, 就可以建立连接

  • 不使用ssh-copy-id如何实现?
    首先将id_rsa.pub复制到web02:/root目录中

[root@web01 .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts

[root@web01 .ssh]# scp id_rsa.pub web02:/root/id_rsa_web01
root@web02's password: 
id_rsa.pub                                                                                      100%  392     0.4KB/s   00:00    

使用密码登陆到web02上

[root@web01 .ssh]# ssh web02
root@web02's password: 
Last login: Sun Jan 21 06:46:45 2018 from web01

将id_rsa_web01 文件追加 /home/uar/.ssh/authorized_keys

[root@web02 ~]# ls
1.php  anaconda-ks.cfg  id_rsa_web01  install.log  install.log.syslog

[root@web02 ~]# mkdir /home/uar/.ssh
mkdir: 无法创建目录"/home/uar/.ssh": 文件已存在
[root@web02 ~]# cat id_rsa_web01 >> /home/uar/.ssh/authorized_keys
[root@web02 ~]# exit
logout
Connection to web02 closed.

就可以直接使用该命令切换到uar@web02

[root@web01 .ssh]# ssh uar@web02
Last login: Sun Jan 21 07:13:30 2018 from web01

将id_rsa_web01追加到其他用户家目录下.ssh/authorized_keys文件中, 就可以在web01上直接通过ssh命令登陆到web02上, 无需输入密码.

windows环境中使用xshell, 也可以生成密钥对 然后将公钥传到主机上, 就可以直接使用私钥进行登录, 如下

打开xshell, 菜单 > 工具 > 新建密钥生成向导, 一路下一步, 然后将公钥保存到文件, 将公钥传到主机上, 使用cat id_rsa_2048.pub.window >> ./.ssh/authorized_keys将公钥追加到authorized_keys文件中, xshell新建连接, 用户登录验证, 选择Public key, 用户密钥, 选择刚才生成的密私钥, 保存后, 就可以不使用密码进行登录

你可能感兴趣的:(SSH远程登录)