标题中的公钥仅是防止不同说法的人混淆。
大多数文章写的大多数都是具体操作,读者对其中过程与原因不是很清楚,仅仅是知道这样做能成功而已。
对于公钥加密是通信双方各持有一组密钥(公钥和私钥),其中公钥都是是公开的,通信各方都会拥有其他人的公钥,在此设定通信双方位A、B。
当A给B发送消息的时候,使用B的公钥加密消息后发送给B。B收到密文后使用自己的私钥进行解密,一次通信完成。
反过来B给A发送消息,使用A的公钥加密消息,A收到后密文使用自己的私钥解密,通信完成。
在这里是A和B各有一组自己的密钥。
假定C进行监听,由于C没有A和B的私钥,所以无法进行解密。
对于SSH使用密钥加密并不是使用通信的原理双方都产生一对密钥(包括公钥和私钥),而是任意一方产生一组密钥。通常环境是客户端产生。将其中一个密钥(通常是常说的公钥,后面解释)上传到服务器上进行验证。这是两个密钥都可以说是私钥,都需要保密。
这时A和B使用一组密钥。
设A为客户机B为服务器,A通过SSH请求连接B的时候,使用自己拥有密钥加密,B收到消息后使用自己拥有的密钥解密,如果解密成功,则验证通过。
但是为什么要选择上传公钥到服务器,是因为在RSA加密体系中,私钥可以设置密码,必须使用密码验证才能使用私钥,而公钥不可以设置密码。
这样将公钥上传到服务器可以实现解密验证,而客户机进行连接的时候不但需要提供私钥,还需要提供私钥的密码,即使入侵者获得了私钥,可是还需要密码才能连接到服务器。相当于使用双层验证提高了安全性。
OK,理论讲的够多了,现在开始实际操作步骤。
1、建立公钥和私钥
Linux下可以运行命令:
ssh-keygen -t rsa
Windows下可以使用SecureCRT建立:
选择工具—>创建公钥,
在这里需要注意下,一般Linux使用的是OpenSSH,需要更改下格式。
2、上传公钥
将公钥上传到服务器如下目录~/.ssh/ (~代表家目录)
并重命名位authorized_keys (配置文件设置,可以更名,但是要同时更新配置文件)
3、服务端配置
修改OpenSSH的配置文件
vi etc/ssh/sshd_config
修改如下项目
PermitRootLogin no #禁用root账户登录,非必要,提高安全性,如果启用必须保证有其他用户可以登录系统
RSAAuthentication yes #RSA验证
PubkeyAuthentication yes #公钥验证
AuthorizedKeysFile .ssh/authorized_keys #密钥位置
PasswordAuthentication no #禁用密码登录
修改完成后重新启动服务
service sshd restart
备注:ssh对证书的文件和目录权限比较敏感,要么根据出错提示设置好文件和目录权限,要么是把StrictModes选项设置为no
4、客户端连接
Linux下
ssh -i <KEY_LOCATION> user@<ssh_server_ip>
scp -i /blue/.ssh/id_rsa filename blue@<ssh_server_ip>:/blue
每次敲命令,都要指定私钥,是一个很繁琐的事情,所以我们可以把私钥的路径加入ssh客户端的默认配置里
vi /etc/ssh/ssh_config
IdentityFile ~/.ssh/id_rsa
如果有其他私钥的话还需要加上其他私钥路径:
IdentityFile ~/.ssh/blue_rsa
windows下可以使用SecureCRT
在连接属性中修改验证方式,
在SSH2鉴权中选择公钥,,点击属性,
选择私钥路径,
这时就可以使用密钥验证登录远端服务器了。
Windows下使用SFTP/SCP
在FileZilla下进入Edit—>Settings…中SFTP页添加密钥,
注意:FileZilla不支持密钥密码,如果有密码的私钥会提示解密并另存为PuTTY的ppk格式.
大多数文章写的大多数都是具体操作,读者对其中过程与原因不是很清楚,仅仅是知道这样做能成功而已。
对于公钥加密是通信双方各持有一组密钥(公钥和私钥),其中公钥都是是公开的,通信各方都会拥有其他人的公钥,在此设定通信双方位A、B。
当A给B发送消息的时候,使用B的公钥加密消息后发送给B。B收到密文后使用自己的私钥进行解密,一次通信完成。
反过来B给A发送消息,使用A的公钥加密消息,A收到后密文使用自己的私钥解密,通信完成。
在这里是A和B各有一组自己的密钥。
假定C进行监听,由于C没有A和B的私钥,所以无法进行解密。
对于SSH使用密钥加密并不是使用通信的原理双方都产生一对密钥(包括公钥和私钥),而是任意一方产生一组密钥。通常环境是客户端产生。将其中一个密钥(通常是常说的公钥,后面解释)上传到服务器上进行验证。这是两个密钥都可以说是私钥,都需要保密。
这时A和B使用一组密钥。
设A为客户机B为服务器,A通过SSH请求连接B的时候,使用自己拥有密钥加密,B收到消息后使用自己拥有的密钥解密,如果解密成功,则验证通过。
但是为什么要选择上传公钥到服务器,是因为在RSA加密体系中,私钥可以设置密码,必须使用密码验证才能使用私钥,而公钥不可以设置密码。
这样将公钥上传到服务器可以实现解密验证,而客户机进行连接的时候不但需要提供私钥,还需要提供私钥的密码,即使入侵者获得了私钥,可是还需要密码才能连接到服务器。相当于使用双层验证提高了安全性。
OK,理论讲的够多了,现在开始实际操作步骤。
1、建立公钥和私钥
Linux下可以运行命令:
ssh-keygen -t rsa
Windows下可以使用SecureCRT建立:
选择工具—>创建公钥,
在这里需要注意下,一般Linux使用的是OpenSSH,需要更改下格式。
2、上传公钥
将公钥上传到服务器如下目录~/.ssh/ (~代表家目录)
并重命名位authorized_keys (配置文件设置,可以更名,但是要同时更新配置文件)
3、服务端配置
修改OpenSSH的配置文件
vi etc/ssh/sshd_config
修改如下项目
PermitRootLogin no #禁用root账户登录,非必要,提高安全性,如果启用必须保证有其他用户可以登录系统
RSAAuthentication yes #RSA验证
PubkeyAuthentication yes #公钥验证
AuthorizedKeysFile .ssh/authorized_keys #密钥位置
PasswordAuthentication no #禁用密码登录
修改完成后重新启动服务
service sshd restart
备注:ssh对证书的文件和目录权限比较敏感,要么根据出错提示设置好文件和目录权限,要么是把StrictModes选项设置为no
4、客户端连接
Linux下
ssh -i <KEY_LOCATION> user@<ssh_server_ip>
scp -i /blue/.ssh/id_rsa filename blue@<ssh_server_ip>:/blue
每次敲命令,都要指定私钥,是一个很繁琐的事情,所以我们可以把私钥的路径加入ssh客户端的默认配置里
vi /etc/ssh/ssh_config
IdentityFile ~/.ssh/id_rsa
如果有其他私钥的话还需要加上其他私钥路径:
IdentityFile ~/.ssh/blue_rsa
windows下可以使用SecureCRT
在连接属性中修改验证方式,
在SSH2鉴权中选择公钥,,点击属性,
选择私钥路径,
这时就可以使用密钥验证登录远端服务器了。
Windows下使用SFTP/SCP
在FileZilla下进入Edit—>Settings…中SFTP页添加密钥,
注意:FileZilla不支持密钥密码,如果有密码的私钥会提示解密并另存为PuTTY的ppk格式.
No comments:
Post a Comment