SSH (Secure Shell) 主要用于远程登录, 采用公钥加密来保证安全
1. 基本用法
$ ssh [-p 22] user@host
2. SSH 采用密钥登录过程
2-1. 主机收到用户的登录请求, 把主机的公钥发给用户
2-2. 用户使用这个公钥, 将登录密码加密后发送给主机
2-3. 主机用自己的私钥, 解密登录密码并验证, 如果密码正确, 就同意用户登录
3. SSH 避免中间人攻击的方法
中间人攻击 (Man-in-the-middle attack)
位于用户与主机之间, 冒充主机来截获用户的登录请求, 将伪造的公钥发给用户, 窃取用户发来的密码
3-1. 方法 1: 口令登录
第一次登录对方主机, 系统会出现下面的提示
$ ssh user@host
The authenticity of host 'host (10.10.10.10)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
3-1-1. 意思是无法确认 host 主机的真实性, 只知道它的公钥指纹, 问你还想继续连接吗?
公钥指纹, 公钥长度较长 (采用 RSA 算法, 1024 位), 很难比对, 所以对其进行 MD5 计算, 将它变成一个 128 位的指纹, 主机必须在自己的网站上贴出公钥指纹, 以便用户自行核对
3-1-2. 当主机的公钥被接受以后, 它就会被保存在用户 $HOME/.ssh/known_hosts 文件中, 下次再连接这台主机, 跳过警告部分, 直接提示输入密码
3-1-3. 每个 SSH 用户都有自己的 known_hosts 文件, 系统也有这个文件 (/etc/ssh/ssh_known_hosts), 保存一些对所有用户都可信赖的主机的公钥
3-1-4. 用户密码用此主机公钥加密
3-2. 方法 2: 公钥登录
3-2-1. 用户将自己的公钥储存在主机上
3-2-2. 登录时远程主机会向用户发送一段随机字符串, 用户用自己的私钥加密后再发回给主机
3-2-3. 主机用事先储存的用户公钥进行解密, 如果成功, 直接允许登录
3-2-4. 免密码登录, 不要求输入密码
3-2-5. 用户需生成公钥
$ ssh-keygen
$HOME/.ssh/ 目录下, 生成 id_rsa.pub (公钥) 和 id_rsa (私钥), 并将公钥传送给主机
$ ssh-copy-id user@host
或将公钥字符串之间追加到主机上用户的 $HOME/.ssh/authorized_keys 文件末尾即可
0 件のコメント:
コメントを投稿