SSH免密码登陆设置实例教程
1SSH原理
SSH 为 Secure Shell 的缩写,安全Shell网络协议,用于计算机之间的加密登录,早期的计算机之间采用明文通信,通信信号被截获以后,内容即被截获一方掌握。1995年,芬兰学者Tatu Ylonen设计了SSH协议对登陆信息进行加密,称为互联网安全的标准解决方案。 有了加密措施,我们就可以确保通信的时候内容不会被第三方窃取。
SSH作为一种协议,有多重实现方案。目前Ubuntu的desktop系统会默认安装OpenSSH的client端,在Windows系统中,可通过开源软件PuTTY实现SSH通信。
2ssh安装
sudo apt-get install openssh-server
3ssh远程登录
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条命令即可。可通过-p参数设定端口号(22是默认端口)。
ssh -p 22 user@host
在没有设置免密码登陆时,需要通过密码登陆。
如果你是第一次登录对方主机,系统会出现下面的提示:
The authenticity of host 'host (12.18.429.21)' 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)
提示无法确认host主机的真实性,只知道它的公钥指纹,还想继续连接吗?
所谓”公钥指纹”,是指对公钥(RSA算法公钥长度1024位)进行MD5计算,转换成128位的指纹,即
98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,容易进行比较。由于用户无法知道远程主机的公钥指纹,需要主机主动提供,才能进行必比对。
经过风险衡量以后,用户决定接受这个远程主机的公钥,则需输入yes。
系统会出现一句提示,表示host主机已经得到认可。
Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
提示输入密码。
Password: (enter password)
如果密码正确,就可以登录了。
当远程主机的公钥被接受以后,会在文件$HOME/.ssh/known_hosts中保存。下次再连接这台主机,系统认出公钥已经保存在本地,跳过警告部分,直接提示输入密码。
每个SSH用户都有自己的known_hosts文件,系统在/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机公钥。
4创建SSH key
如果经常输入密码会显得比较麻烦,可以通过让主机记录公钥来实现免密码登陆。这里首先要创建公钥。
命令为:
ssh-keygen -t [rsa|dsa] –C [Comments] -t = The type of the key to generate
密钥的类型,加密方式选 rsa|dsa均可以,默认dsa
-C = comment to identify the key 用于识别这个密钥的注释
命令实例为:
pi@raspberrypi:~/Desktop/LD_current $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
74:cc:78:e7:4e:c0:8f:82:b6:30:15:53:21:66:be:3c pi@raspberrypi
The key's randomart image is:
+---[RSA 2048]----+
| *.o. |
| + + = |
| o o B . |
| o + o * |
| o E S . + |
| + o . o |
| . . |
| |
| |
+-----------------+
进入“.ssh”会生成以下几个文件
authorized_keys:存放远程免密登录公钥,通过该文件记录多台机器的公钥;
id_rsa:生成的私钥文件
id_rsa.pub:生成的公钥文件
know_hosts:已知的主机公钥清单
pi@raspberrypi:~ $ cd .ssh
pi@raspberrypi:~/.ssh $ ls
id_rsa id_rsa.pub known_hosts
如果希望ssh公钥生效需满足至少下面两个条件:
ssh目录的权限必须是700
ssh/authorized_keys文件权限必须是600
5拷贝公钥到远程主机
命令:ssh-copy-id -i ~/.ssh/id_rsa.pub
-i参数可采用默认项。
pi@raspberrypi:~/.ssh $ ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
现在我们就可以不需要输入密码登录了。
pi@raspberrypi:~/.ssh $ ssh [email protected]
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-29-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
1 个可升级软件包。
1 个安全更新。
Last login: Thu Aug 2 00:44:40 2018 from 192.168.1.107
git@wpr:~$