在使用openssh的过程中,整理了知识细节,回过头来发现,基础的原理是非常重要的,不要被各种工具的GUI所蒙蔽,比如putty和CRT。以下设定情景是客户端使用的ubuntu,工具使用openssh,服务端是linux服务器。ssh比telnet协议安全,所以对于管理员来说大多数使用ssh来登录管理服务器,先来看清楚一次登录过程是怎样的。
1. 客户端发起登录请求
2. 服务器端返回自己的公共密钥给客户端
3. 客户端接受后,使用服务器端的公共密钥给密码进行加密,然后再次发送给服务器端
4. 服务器端接收到后,在使用自己的私有密钥进行解密,解密成功,并且密码正确,客户端即登录成功
客户端登录命令如下:
$ ssh user@host # user 为服务端的用户名称,host为服务端的ip,或者别名
$ passwd:
输入密码,如果正确,即可登录成功。以上为口令登录,但是对于管理员来说,每次输入密码是很繁琐的一件事,为了避免每次输入相同的密码,我们来介绍另外一种登录方式,公共密钥登录,具体过程如下:
1. 客户端首先将自己的公共密钥发送给服务器端存储起来
2. 客户端发起登录请求,服务器端接受到后,发送一段随机的字符串给客户端
3. 客户端接受该随机字符串后使用自己的私有密钥进行加密,然后发送给服务端
4. 服务端接收后,使用存储的客户端公共密钥进行解密,解密成功,客户端即可登录,就无须输入密码
以上过程中,有几个具体操作,如下:
1. 如果发送客户端自己的公共密钥给服务器端
$ ssh-copy-id user@host
2. 发送成功后,服务器端会将客户端的公共密钥保存在user主目录下的.ssh/下,文件名称为authorized_keys中,如果客户端没有公共密钥,使用如下命令生成即可:
$ ssh-keygen
生成后有2个文件,位于~/.ssh/下,id_rsa.pub 为公共密钥,id_rsa 为私有密钥。
另外,在你很久没有登录某台服务器后,有天你再次登录后发现无法登录,提示有可能受到 main-in-the-middle attack,需要你联系管理员,这种情况是有可能服务器的公共密钥和你本机存储的该服务器上的公共密钥不同,使用信息提示提供的方法删除该服务器对应的密钥,然后重新登录服务器即可,删除方法如下:
$ ssh-keygen -f "~/.ssh/known_hosts" -R IP
ip地址为服务器端地址,know_hosts文件中存储的即是客户端存储的服务器端公共密钥的记录,以上命令是删除掉该IP对应的公共密钥的记录。know_hosts文件的位置和客户端公共密钥的位置相同。
以上就是在使用ssh协议登录时候需要了解的底层细节。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于