SSH
Secure SHell :
是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。通过加密保证了数据的保密性和完整性。ssh采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。
传统的FTP、Telnet是再网络中明文传送数据、用户账号和密码,很容易受到中间人攻击。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗
ssh客户端(ssh) ssh服务端(sshd)
+----------+ +---------+
| | | |
| | | |
| | | |
| | | |
+---+---+--+ +-+---+---+
| | | |
| | | |
| +----------------------------+ |
| |
| ssh加密了的TCP通信 |
+------------------------------------+
SSH连接
SSH只是一种协议,其开源实现的有OpenSSH程序
SSH Key
SSH 秘钥对 最直观的作用:让你方便的登录到SSH服务器,而无需输入密码。由于你无需发送你的密码到网络中,SSH秘钥对被认为是更加安全的方式
原因是:SSH利用SSH key来进行前面提到的基于秘钥的安全验证
使用SSH key的步骤:
- 在客户端生成SSH KEY(秘钥对:公钥和秘钥)
- 在服务端的配置文件中加入你的公钥。(比如我们需要再GItHub中粘贴你的公钥)
生成秘钥对
ssh-keygen 命令用于为ssh生成、管理和转换认证秘钥,他支持RSA和DSA(ED) 三种算法认证秘钥。
该命令的选项:
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。
生成秘钥对时,有一个选项要求你设置密码(passphrase),该密码是用来保护你的私钥的密码。如果设置了则在使用私钥时会要求你输入这个密码:一般不设置,【之后可以更改密码,使用 " ssh-keygen -p "】
生成后最好将私钥进行备份,另还有-C 选项,用于为指定注释,通常使用自己的邮件名作为注释
示例:为了安全考虑使用RSA加密方式并指定密钥长度 -b 2048(1024的密钥长度能够被破解,建议指定为2048或4096)。
$ ssh-keygen -t rsa -C "your_email@example.com" -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回车键 (如果需要生成多对key,则输入/home/users/.ssh/filename)
Enter passphrase (empty for no passphrase): 输入密码(一般不输入密码,直接回车)
Enter same passphrase again: 再次输入密码
...
# 查看公钥文件中的内容
$ cat ~/.ssh/id_rsa.pub
ssh-rsa "公钥内容" your_email@example.com
#或者
$ cat ~/.ssh
$ cat ./id_rsa.pub
# 注意在其他地方导入公钥时一定要将公钥文件中的*全部内容*都导入,包括末尾你的邮箱。
如何创建多个ssh 可以、而不是覆盖默认的文件
在创建ssh key时自动输入路径和文件名称,而非使用默认路径和文件名即可
或者使用个 -f 来指定文件名
ssh-keygen -t rsa -C "123@aa.com" -f ~/.ssh/second-rsa
使用非默认的SSH Key
对于OpenSSH 客户端(liunx默认安装),需要在 ~/.ssh/config 文件中进行配置(如果没有改文件则自行创建一个)。
分为如下两种情况
1.为不同服务器的同一用户配置不同的SSH key
好吧,这里同一用户在不同服务器上是可以使用同一个SSH key
2.配置多个账户
为同一个台服务器配置多个账户,那么可以这样在config文件中配置:
# coding
Host git.coding.net
User your_email@example.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa //默认的私钥
# second
Host git.coding.net
User youre_secondemail@example.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/second_rsa // 生成的第二个私钥