一、什么是SSH?

SSH 是 Secure Shell 的简写

SSH protocol 安全外壳协议 ,是建立在应用层上的安全协议

SSH协议通过加密的方式保护客户机和服务器之间的连接。

所有用户身份验证、命令、输出和文件传输都经过加密,以防止网络中的攻击。


ssh公钥如何在idea上remote ssh公钥是什么_身份验证

SSH客户机和服务器

 

二、SSH密钥和公共密钥认证

1. SSH密钥

SSH 协议使用公钥加密对主机和用户进行身份验证

身份验证密钥(这里称为SSH密钥)是使用keygen程序创建的

2. 公共密钥认证

公共密钥认证避免了将密码存在文件中,从而提高了安全性,并消除了服务器盗取用户密码的可能性

但是,SSH密钥和密码一样也是身份验证凭证,所以对SSH密钥也要进行类似于用户名的管理,

当不需要这些密钥时应该有一个适当的终止处理来移除密钥

3. ssh-keygen

SSH-keygen是为SSH创建新的身份验证密钥对的工具。

生成的密钥对常用于自动登录、单点登录和认证主机

参考:ssh-keygen 中文手册

4. ssh-copy-id

ssh-copy-id是公钥安装工具,可以在服务器上安装一个SSH密钥作为授权密钥

目的是使客户端每次登录登录能被允许而不需要登录密码

这有助于使用 SSH 协议实现自动、无密码登录和单点登录

5. 创建和使用SSH密钥对

# # 密钥的生成 # #
#-------------------------------------------------------------
# 生成前可以先检查一下有没有生成过ssh
ls -al ~/.ssh
# Lists the files in your .ssh directory, if they exist

# 不带参数以默认方式生成密钥,这是最简单的生成方式
ssh-keygen  
# 执行后会有以下输入提示:
Enter file in which to save the key :  
## 输入密钥保存位置,可以为空,为空默认保存在用户目录的.ssh目录中
### Windows下默认保存在 /c/Users/系统用户名/.ssh/id_rsa
### Linux下默认保存在 /home/系统用户名/.ssh/id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
## 设置密码短语并输入验证,这个密码短语用于对密钥进行加密
### 设置了密码短语后,即使别人获得了私钥文件也无法使用该密钥
### 但是设置密码短语,每次使用SSH通信都需要再次输入该短语进行验证
### 为了方便起见,可以不设置

# 默认的密钥文件名取决于算法,文件名为 id_算法名 
# 例如使用默认算法RSA时为密钥文件名为 id_rsa 公钥文件名为 id_rsa.pub
# SSH还会自动生成一个 known_hosts 文件,ssh会把你每个你访问过计算机的公钥都记录在该文件
# 下次访问相同的计算机时,OpenSSH会核对公钥

ssh-keygen -t rsa -N '' -f id_rsa -q # 无需回车快捷生成密钥对
# ----------------------------------------------------------------------------------

# # 密钥的使用 # #

# 要使用公钥进行认证,必须将公钥复制到服务器并添加到授权的密钥文件中
# 可以通过 ssh-copy-id 工具方便地完成
ssh-copy-id -i ~/.ssh/mykey user@host

# 一旦在服务器上配置了公钥,服务器将允许拥有私钥的任何用户连接。
# 连接过程中,客户端通过对密钥交换进行数字签名来证明拥有私钥

6. keygen 工具常用语法及常用选项


ssh公钥如何在idea上remote ssh公钥是什么_文件名_02

常用语法

 

keygen常用选项

选项

含义

说明

-b

Bits

用于指定密钥中的位数,以比特为单位

-t

Type

指定创建密钥的(算法)类型

-f

File

指定保存生成密钥的文件名(带路径)

-c

Comment

修改密钥文件的注释

-q

Silence

静默模式,不现实输出

-v

Verbose

详细模式,ssh-keygen 将会输出处理过程的详细调试信息。常用于调试模数的产生过程。

重复使用多个 -v 选项将会增加信息的详细程度(最大3次)

-N

New 

提供新的密码短语

-P

Passphrase

提供旧的密码短语

-p

Change the passphrase

要求改变某私钥文件的密码短语而不重建私钥,可以根据提示修改,也允许通过后面加

[-P old_passphrase] and [-N new_passphrase] [-f keyfile] 的方式修改

-R

Remove

从 known_hosts 文件中删除所有属于 hostname 的密钥

这个选项主要用于删除经过散列的主机

-F

hostname

在 known_hosts 文件中搜索指定的 hostname,并列出所有的匹配项

这个选项主要用于查找散列过的主机名/ip地址,还可以和 -H 联用打印找到的公钥的散列值

-H

Hash

对 known_hosts 文件进行散列计算。这将把文件中所有主机名/ip地址替换为相应的散列值

原来文件的内容将会添加一个”.old“后缀后保存。这些散列值只能被 ssh 和 sshd 使用

这个选项不会修改已经散列过的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用

-l

 

显示公钥文件的指纹数据,也支持RSA1的私钥 

对于RSA和DSA密钥,将会寻找对应得公钥文件,然后显示其指纹数据 

7. SSH支持的算法

① RSA(-rsa)

SSH的默认密钥算法

是一种基于大数分解困难原理的老算法,普遍认为是目前最优秀的公钥方案之一

RSA公开密钥密码体制的原理

根据数论,寻求两个大素数比较简单,而将它b们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

推荐RSA密钥大小至少为2048 bits,设置为4096 bits 更好

由于因数分解正在取得重大进展,在可预见的未来,RSA实际上很有可能被破解,选择不同的算法可能是更明智的选择


② DSA(-dsa)

一种美国政府老式的数字签名算法,基于计算离散对数的困难性,也不推荐使用


③ elliptic curve DSA(-ecdsa)

一种由美国政府标准化的椭圆曲线数字签名算法,对当前来说是个很好的算法

只支持三种键大小:256 bits、384 bits、521 bits

建议总是使用521 bits ,因为密钥仍然很小并且可能会比键更小的更安全(尽管应该它们都是安全的)

大多数SSH客户机现在都支持这种算法,推荐使用


④ ed25519

这是OpenSSH中添加的一个新算法,客户端对它的支持还不普遍,因此,在通用应用程序中使用它可能还不可取

 

三、关于密码短语(Passphrase)

什么是是密码短语?

密码短语类似于密码,但密码一般用来验证身份以登录到系统,而密密码短语用来生成密钥

加密密钥来自于密码短语并用于加密受保护的资源

密码短语应该是什么样的?

一个好的密码短语至少应该有15个字符,最好是20个字符,并且是难以猜测的。

它应该包含大小写字母,数字,最好至少有一个标点符号。其中任何部分都不应该是从用户或家庭信息衍生出来的

密码短语的作用

SSH密钥用于对信息系统中用户身份进行身份验证,而SSH密钥本身为私钥

密码短语的作用通常是加密私钥,这使得密钥文件本身对攻击者来说毫无用处

要使用加密密钥,通常需要还密码短语。从某种意义上说,密码短语和密钥是认证中两个独立的因素

私钥使用从密码短语派生出来的对称加密密钥来进行进一步加密,密钥派生使用哈希函数完成

密码短语通常用于交互式用户的密钥,强烈建议使用密码短语来减少密钥泄露的风险

但事实上90%的SSH都没有密码短语,建议使用适当的SSH密钥管理工具

 

SFTP (SSH File Transfer Protocol),SSH文件传输协议 是一种安全的文件传输协议,它运行再SSH协议之上