ssh原理与使用
概念
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。另外,传输的数据是经过压缩的,所以可以加快传输的速度。ssh目前已经成为Linux系统的标准配置。
- 明文:需要秘密传送的消息。
- 密文:明文经过密码变换后的消息。
- 加密:由明文到密文的变换。
- 解密:从密文恢复出明文的过程。
- 破解:非法接收者试图从密文分析出明文的过程。
- 加密算法:对明文进行加密时采用的一组规则。
- 解密算法:对密文进行解密时采用的一组规则。
- 密钥:加密和解密时使用的一组密码信息。
- 对称加密:是采用单钥密码系统的加密方法,使用同一密钥对信息进行加密和解密的加密方法。
· 客户端向SSH服务器发出请求,服务器将自己的公钥返回给客户端。
· 客户端用服务器的公钥加密自己的登录密码,再将信息发送给服务器。
· 服务器接收到客户端传统的密码,用自己的私钥解码。如果结果正确,则同意登录,建立起连接,否则拒绝。 - 非对称加密:需要两个密钥:公共密钥和私有密钥,它们成对出现,公钥加密的数据有且只有私钥能解密,私钥加密的数据有且只有公钥解密,“非对称加密”加密方法加密和解密使用不同的密钥。
- 对称/非对称加密的区别:加密和解密是否使用的同一个密钥。
加密、身份认证、数字签名认证
- 加密:将数据资料加密,使得非法用户即便获取加密后的资料,也无法获取正确的资料内容,所以数据加密可以保证数据防止监听攻击;其重点在于数据的安全性。
- 身份认证:判断某身份的真实性,确认身份后,系统才可以依不同的身份赋予不同的权限;其重点在于用户的真实性。
- 数字签名认证:"数字签名"是附加在数据单元上的一些数据,或对数据单元所作的密码变换(允许接收者判断数据的来源和数据的完整性,防止被伪造篡改)。数字签名认证侧重于保证数据的完整性,防止被伪造和篡改。
公钥私钥原则
- 一个公钥对应一个私钥。
- 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
- 如果用其中一个密钥加密数据,则只有对应的另一个密钥才可以解密。
- 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的另一个密钥进行的加密。
两种级别验证方法
- 基于口令的安全验证:只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。
- 基于密钥的安全验证:为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。
使用
一般Ubuntu系统默认自动安装有ssh客户端
-
服务端:树莓派/Nano/TX2/NX/工控机
-
客户端:其它Ubuntu电脑/虚拟机
-
确认是否安装:
dpkg -l | grep ssh
-
自行安装服务端:
sudo apt-get install openssh-server
(客户端openssh-client
) -
查看系统是否已经安装ssh客户端或者服务端:
dpkg -l | grep ssh
-
查看是否启动:
ps -e | grep ssh
-
启动ssh服务:
sudo /etc/init.d/ssh start
-
关闭ssh服务:
sudo /etc/init.d/ssh stop
-
重启ssh服务:
sudo /etc/init.d/ssh restart
登录方式有账号密码登录和公钥密钥登录
账号密码登录
ssh -Y 服务端用户名@服务端ip地址
- 选择端口号:
ssh -p 22 -Y 服务端用户名@服务端ip地址
- 服务端修改端口号:
/etc/ssh/sshd_config
- 修改Port:
sudo /etc/init.d/ssh restart
公钥密钥登录
- 生成公钥密钥对:
ssh-keygen -t rsa(客户端)
· 然后根据提示按enter(其中有一个提示是要求设置私钥口令passphrase,不设置则为空),执行结束以后会在/home/
当前用户 目录下生成一个.ssh
文件夹,其中包含私钥文件id_rsa
和公钥文件id_rsa.pub
- 上传公钥到服务端:
ssh-copy-id 服务端用户名@服务端ip地址
· 将公钥复制到远程主机。ssh-copy-id
会将公钥写到远程主机的~/ .ssh/authorized_key
文件中,以后登录这个远程主机就不用再输入密码了
别名登录
~/.ssh/config(客户端)
Host wheeltec
HostName 192.168.0.100
User wheeltec
Port 22