SSH远程登录
SSH远程登录
什么是SSH?
SSH(Secure Shell Protocol)是一个是一种加密的网络传输协议,是一个Protocol,它有具体实现,比如开源的openSSH。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接,可在不安全的网络中为网络服务提供安全的传输环境,SSH最常见的用途是远程登录系统。
连接的整个过程
- 建立连接 SSH是基于TCP/IP协议的,所以最开始的时候要先进行TCP3次握手
- 版本协商 SSH目前有SSH-1和SSH-2两个版本,加密方式不同,需要预先协商使用的版本
- 算法协商 协商使用哪种加密算法,如 RSA,ED25519
- 密钥交换 使用DH密钥交换算法(Diffie–Hellman key exchange)生成共享密钥。过程如下
首先客户端生成公钥pk1,私钥sk1,然后将pk1发送给服务端
服务端生成服务端自己的公钥pk2,私钥sk2,然后服务端使用pk2,sk2,pk1生成了共享密钥ss1
接着服务端不会直接发送ss1给客户端,而是发送pk2给客户端,也就是也将自己的公钥发送给对方
客户端收到pk2后,使用pk1,sk1,pk2生成了共享密钥ss2,DH算法证明,ss1和ss2是一样的share secret
那么这个时候就可以使用由非对称加密得到的共享密钥,同时也是会话密钥(Session Key),这个密钥就可以作为后续通信的对称密钥了。注意以上的过程中的客户端服务端生成的公钥私钥都为临时密钥 - 身份认证 可以使用密码认证,也可以使用密钥认证。
密码认证不安全,可能会被截取破解。
若使用密钥认证,首先服务端得有客户端复制而来的公钥,接下来有如下过程首先客户端发出连接request,服务端收到request后生成随机数R,使用公钥生成密文并发送给客户端
客户端收到密文后使用私钥解密得到随机数R,接着使用Session Key对R进行哈希得到数据摘要Digest1并发送给服务端
服务端收到Digest1,同时服务端使用Session Key对R进行哈希得到Digest2,如果Digest1=Digest2,验证通过
整个过程相比于密码登录,更为安全 - 会话请求 在身份认证成功后,客户端向服务器发送会话请求。此时,客户端会使用会
Session Key
用于对后续传输的数据进行加密。 - 信息通讯 会话建立后,就可以进行通信。由于只有客户端和服务器能够解密和理解这些信息,即使在不安全的网络环境中,数据仍然可以保持机密。
ssh远程登录
使用命令ssh <user>@<host>
比如,以root用户登录ip为1.1.1.1的主机
1 | ssh root@1.1.1.1 |
ssh登录端口默认22,还可以指定端口,使用-p
参数
比如,以git用户登录ip为2.2.2.2的主机
1 | ssh git@2.2.2.2 -p 22 |
如果没用密钥认证,接下去会让你输入密码
密钥认证免密登录
客户端生成公钥和私钥,使用命令
ssh-keygen
常用可选参数如下:参数 作用 -t type,指定加密算法 -C comment,备注信息 -f filename,指定密钥储存文件的文件名 -N new_passphrase,指定新的密码 -q quiet,静默模式,不显示输出 比如,使用命令
1
ssh-keygen -t ed25519
这时会在
~/.ssh/
下生成两个文件id_ed25519
和id_ed25519.pub
,分别储存着私钥和公钥接着使用命令
ssh-copy-id <user>@<host>
将公钥复制到服务端
比如ssh-copy-id root@1.1.1.1
将会把公钥复制到服务端的
~/.ssh/authorized_keys
下后续再使用ssh登录时就不用再输入密码