SSH

SSH

什么是SSH

SSH 为 Secure Shell 的缩写,SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到中间人(man-in-the-middle)这种方式的攻击。

所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。

使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

两种验证方式

从客户端来看,SSH提供两种级别的安全验证。

  1. 第一种级别(基于口令的安全验证) 只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
  2. 第二种级别(基于密匙的安全验证) 需要依靠秘钥,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。

秘钥验证

公钥

公钥 (public key):提供给远程主机进行数据加密的行为,也就是说,大家都能取得你的公钥来将数据加密的意思。

私钥

私钥 (private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。由于私钥是这么的重要, 因此私钥是不能够外流的!只能保护在自己的主机上。

生成一对秘钥

我的身份是yoyo,所以当我执行 ssh-keygen 时,会在我的家目录底下的 .ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥 id_rsa 与公钥 id_rsa.pub

#[-t rsa] 指定加密算法为RSA 
#[-P '']  表示空密码,也可以不用-P参数,
#这样就要三车回车,用-P就一次回车

ssh-keygen -t rsa -P ''

ssh 对目录和文件权限的要求很严格。~/.ssh/ 目录必须要是 700 的权限才行。 另外一个要特别注意的就是id_rsa 的权限啦,id_rsa必须要是 600 才行。 否则在未来密钥比对的过程当中,可能会被判定为危险而无法成功的以公私钥成对档案的机制来达成联机。

其实,通过 ssh-keygen 自动建立私钥后预设的权限与文件名放置位置都是正确的,只要检查过没问题即可。要是权限不对的话可以参考下面的命令

chmod 600 .ssh/authorized_keys
chmod -R 700 .ssh/
chmod 600 id_rsa
免密登陆

示例:想要达成 ssh yoyo@1.1.1.1 不用输入密码,就直接登陆成功。

解答:

将本机 ~/.ssh/id_rsa.pub 文件内容复制到 1.1.1.1 的服务器上的 yoyo用户的家目录下的 ~/.ssh/authorized_keys中即可。

注意的点:

  1. 需要保证该服务器上yoyo的家目录的拥有者与群组都必须是yoyo
  2. ~/.ssh/ 必须是 700
  3. ~/.ssh/authorized_keys文件权限则必须为 600
  4. ~/.ssh/~/.ssh/authorized_keys同时文件的拥有者与群组都必须是yoyo才行。

未来,当你还想要登入其他的主机时,只要将你的 public key (就是 id_rsa.pub 这个文件) 给他 copy 到其他主机上面去,并且新增到某账号的 ~/.ssh/authorized_keys 这个文件中, 并保证权限正确即可。

简称免密登陆

本机使用简称登陆 例如 ssh my_web

需要在本机的~/.ssh/config中添加以下内容, 如果~/.ssh/config文件不存在自己创建即可,但要保证文件权限为 600

  #不断开
  ServerAliveInterval 60

  Host my_web 
  User yoyo
  Hostname 1.1.1.1