0 背景:
早期的远程登录用telnet,都是明文的,不安全 telnet: 远程登录协议, 23/tcp C/S S:telnet服务器 C:telnet客户端 ssh: Secure SHell, 应用层协议,基于TCP工作,工作在tcp的22号端口22/tcp 通信过程及认证过程是加密的,主机认证(主机之间有暗号 防止主机冒充) 用户认证过程加密 数据传输过程加密 服务端有私钥,客户端有服务器的公钥, 第一次互通的时候,客户端先接收到对方的公钥,如果客户端已经有,则不发。 比如在做多机器ssh的时候,提示你输入yes后,就会将对方的公钥拷贝到本机中,然后客户端在访问服务端的时候,会带着客户端数据带上服务端公钥发送到服务端, 客户端在收到公钥之后,会试图生成对称密码,并使用服务器端的公钥加密将此密码发送给服务器端,那么此加密的东西只有服务器端能解密,这个过程就叫做秘钥交换。 为了防止在秘钥交换中暴力破解,一般都是通过普通用户登录后 su root后在执行ssh到其他机器执行其他机器操作。 认证过程两种方式: 基于口令认证 基于密钥认证: ssh有两个版本: ssh v1 给予口令认证 不安全,能够被man-in-middle 攻击到,man-in-middle会截获客户端,服务端,分别冒充对方,然后传送假数据。 sshv2: 基于秘钥认证 安全 在客户端生成一对秘钥,公钥和私钥,私钥客户端保留,公钥放在服务端家目录下,客户讲本机公钥加密的数据发送到服务端,然后服务端通过本机中的客户端私钥 解密,解密成功,则说明链接是成功的,否则说明两个机器无法ssh
1 openSSH
ssh协议是公开的,是一套规范。
实现:服务器端、客户端使用这套规范来实现通信,在linux中,ssh协议的实现通常是 openSSH
Linux: openSSH C/S 服务器端:sshd, 配置文件/etc/ssh/sshd_config 客户端:ssh, 配置文件/etc/ssh/ssh_config ssh-keygen: 密钥生成器,给予秘钥认证时使用 ssh-copy-id: 将公钥传输至远程服务器,而且能保存到用户家目录下的特定文件中 scp:跨主机安全复制工具 客户端使用: ssh: ssh chinadaas12 默认是用当前客户端登录用户来实现ssh登录 ssh USERNAME@HOST 以指定用户来ssh登录服务端 ssh -l USERNAME HOST ssh USERNAME@HOST 'COMMAND' 以指定用户来登录远程主机并在远程主机中执行COMMAND命令 scp: scp SRC DEST -r -a scp USERNAME@HOST:/path/to/somefile /path/to/local 去远程主机中将somefile拷贝到本地的local下 scp /path/to/local USERNAME@HOST:/path/to/somewhere 将本地local下文件拷贝到远程主机somewhere下 ssh-keygen -t rsa 指定以rsa方式生成秘钥 ~/.ssh/id_rsa 私钥 ~/.ssh/id_rsa.pub 公钥 -f /path/to/KEY_FILE -P '': 指定加密私钥的密码 客户端的公钥追加保存到远程主机某用户的家目录下的.ssh/authorized_keys文件或.ssh/authorized_keys2文件中,一定不要覆盖,防止将服务端保存的别的客户端文件覆盖掉 ssh-copy-id 这个命令并不是在所有主机下都有这个命令,能自动将客户端公钥文件拷贝到服务端对应目录中并追加保存。 -i ~/.ssh/id_rsa.pub ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@HOST
2 dropbear
嵌入式系统(小系统)专用的ssh服务器端和客户端工具 服务器端:dropbear dropbearkey 客户端:dbclient dropbear默认使用nsswitch实现名称解析 /etc/nsswitch.conf /lib/libnss_files* /usr/lib/libnss3.so /usr/lib/libnss_files* dropbear会在用户登录检查其默认shell是否当前系统的安全shell /etc/shells 主机密钥默认位置: /etc/dropbear/ RSA: dropbear_rsa_host_key 长度可变, 只要是8的整数倍,默认为1024 DSS: dropbear_dss_host_key 长度固定,默认为1024 dropbearkey -t rsa|dsa -f /path/to/KEY_FILE -s SIZE
3 机器之间通讯认证相关的几个概念:
CA : 证书颁发机构 certificate authority ssl协议:是网景公司的 openssl: 开源的ssl ssl: 是一个库,是一个功能,实现加密 secure socket layer(安全套接字层) 应用层(http,smtp,ftp层)在传输数据到TCP协议时,调用SSL功能,这么久能实现加密功能。 因此http+ssl = https 数据安全传输 公钥加密 RSA: 能加密 解密 DSA: 只能加密 加密解密需要算法实现,一个工具能在主机上给我们提供 算法的实现,在Linux中,常用的这个工具是openssl 或者 gpg openssl: ssl的开源实现,几乎实现了市场所有加密算法 libcrypto: 加密库 libssl 基于身份认证,数据机密性 会话完整性 tls/ssl库 openssl 多用途命令行工具 #openssl version 国际通用协议: TLS 传输层安全(transport layer security) 在SSL基础上的一个更通用协议 openssh: 将认证实现加密 将传输也实现加密 运行在linux/unix的开源实现 ssh客户端: linux: 就是ssh命令 window: putty(尽量不要使用这个 破解版有病毒) SecureCRT SSHSecureShellClient(自带远程文件传送工具) Xmanager ssh服务端: sshd: 只能按照在服务器端,默认运行在后台 ssh sshd的配置文件所在目录: /etc/ssh ssh客户端配置文件: ssh_config sshd服务端配置文件: sshd_config 比如 其内就配置了 #AuthorizedKeysFile .ssh/authorized_keys默认是这个路径,如果要修改取消注释修改即可 改变配置信息后需要重启,service sshd xxx 通过ssh连接到主机后,会在本机中的.ssh/known_hosts内增加主机的公钥信息 scp: 基于ssh的远程复制命令,