前言

无论是个人的VPS还是企业允许公网访问的服务器,如果开放22端口的SSH密码登录验证方式,被众多黑客暴力猜解捅破菊花也可能是经常发生的惨剧。企业可以通过防火墙来做限制,普通用户也可能借助修改22端口和强化弱口令等方式防护,但目前相对安全和简单的方案则是让SSH使用密钥登录并禁止口令登录。

这是最相对安全的登录管理方式

扩展阅读
SSH原理与运用 - http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
Linode - https://www.linode.com/docs/networking/ssh/use-public-key-authentication-with-ssh

公钥认证的基本思想

客户端机器的 ssh public key 添加到服务器~/.ssh/authorized_keys 文件中,可实现ssh的免密码登录。

客户端生成公钥和私钥

Linux:ssh-keygen -t rsa
[私钥 (id_rsa) 与公钥 (id_rsa.pub)]
Windows:SecurCRT/Xshell/PuTTY
[SSH-2 RSA 2048]
生成一个名为test的公钥和私钥对,密码留空不输入。具体的说明请看这里: ssh-keygen 基本用法

  1. #生成SSH密钥对
  2. [lee@101 ~]$ cd .ssh/
  3. [lee@101 .ssh]$ ssh-keygen -t rsa -f test -C "test-key"
  4. Generating public/private rsa key pair.
  5. Enter passphrase (empty for no passphrase):
  6. Enter same passphrase again:

查看公钥内容

  1. [lee@101 .ssh]$ cat test.pub
  2. ssh-rsa
  3. AAAAB3NzaC1yc2EAAAABIwAAAQEAogyXOlD77fWF0bTm0r2HrRf8SKPKWjSv4pZKPZfBHOSZI8B0EDGr5/dpsMCPHUcZBt9v5BgJvLao/znBabap6TWt1yuStDh2rnzXY5uTFah0AiMlnQ7DhjkcctdLfLErz1V2jFTXEC2oGOanLoObpHV+LyeXkn/+i0VekT3QiULSkpzK/gsCtaLmaHLbGxv4GGGAoHtTZrfw09hGo47AeiyxzczcBa7TPXSATVPtCStWk+jzMcIyTyxcE7ORIsClN5xNLnbXiEQF5jOcP0qbjAmOH256E565VFh2WC8srjadfUm6jZLEiE5w7lp2/3rRynAsnF0zjEONE9aPUPhiNw==
  4. test-key

配置公钥到服务器

将公钥内容添加到服务器的 ~/.ssh/authorized_keys 文件中.
alias 实现命令快速登陆

做好配置之后,通过ssh可以直接登录了。
对经常登录的服务器也可以用别名,可以将ssh登录命令的 alias 加到 ~/.bash_profile 文件中。

  1. $ cat ~/.bash_profile | grep 101
  2. alias to-101='ssh huqiu@192.168.154.101'

登录的时候:

$ to-101

无法登录一般的原因

客户端的私钥和公钥文件位置必须位于 ~/.ssh 下。

确保双方 ~/.ssh 目录,父目录,公钥私钥,authorized_keys 文件的权限对当前用户至少要有执行权限,对其他用户最多只能有执行权限。

注意git登录,要求对公钥和私钥以及config文件,其他用户不能有任何权限。

服务器端 ~/.ssh/authorized_keys 文件名确保没错 :)。

ssh-copy-id

ssh-copy-id 是一个小脚本,你可以用这个小脚本完成以上工作。这个脚本在linux系统上一般都有。

分类: web

标签:   linux   ssh