SSH 杂项

2015-01-28 Wednesday     linux , misc

简单记录一些常见的 SSH 使用技巧。

登陆禁止

有时候需要 SSH 登陆到别的 Linux 主机上去时,可能会弹出如下类似提示:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
... ...
Host key verification failed.

ssh 会把访问过的计算机公钥 (public key) 记录在 ~/.ssh/known_hosts,下次访问时,OpenSSH 会核对公钥,如果公钥不同,则会发出警告,避免受到 DNS Hijack 之类的攻击。

如果一台主机上有多个 Linux 系统,或者需要重新设置公钥,那么就需要手动删除 known_hosts 中相应的配置项。可以有两种方式解决:

1. 手动删除修改 known_hosts 里相应的记录;

2. 修改配置文件 "~/.ssh/config",加上这两行,重启服务器。
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null

后者安全性比较低。

双因子验证

Google 提供了简单的双因子验证程序 (除此之外还有FreeOTP) ,而且是开源的,详细可以参考手机端程序 github auth 以及 ssh 服务端的 PAM 模块 github libpam

手机端可以直接下载安装即可,在 CentOS 中,可以通过如下方式安装。

----- 生成二维码的工具
# yum install qrencode

----- 安装PAM模块
# yum --enablerepo=epel install google-authenticator

然后直接通过 google-authenticator 命令配置即可,除了二维码,还会生成一堆类似如下的内容;可以直接通过手机扫描二维码即可,或者手动输入下面的 Secret Key

Your new secret key is: XXXXXXXXXXXXXXXXXXXXXXXXXX
Your verification code is 666666
Your emergency scratch codes are:
  11111111
  22222222
  33333333
  44444444
  66666666

最终配置完成后,会在 HOME 目录下生成一个 .google_authenticator 文件,默认权限为 400 。

配置sshd

接下来需要确认如下内容。

$ cat /etc/pam.d/sshd | grep 'pam_google_auth'
auth required pam_google_authenticator.so

$ cat /etc/ssh/sshd_config | grep 'ChallengeResponseAuthentication'
ChallengeResponseAuthentication yes

# systemctl restart sshd

然后,通过 ssh 登陆时,会有如下的提示内容。

$ ssh 192.168.9.102
Verification code: 
Password: 

安全加固

通过 sshd -T 命令可以查看当前 ssd 的配置参数,修改完配置后,通过 sshd -t 测试配置文件。

#----- 修改默认监听端口,建议大于1024,很多端口扫描软件不扫描高位端口
Port 2022

#----- 仅允许V2版本,V1存在中间人以及注入攻击
Protocol 2

#----- 不允许root用户登陆,或者不允许密码登陆,新版使用prohibit-password参数
PermitRootLogin yes
PermitRootLogin without-password

#----- 禁止空密码账户登入
PermitEmptyPasswords no

#----- 设置白名单,建议使用无实际权限的虚拟用户,可以添加到wheel组以便切换到root
AllowUsers foo bar foobar
#----- 设置黑名单
DenyUsers alice

#----- 修改登录时间,默认是2m,也就是2分钟
LoginGraceTime 1m

#----- 设置活动用户检测,如果10分钟处于非活动状态的话,就立即自动断线
ClientAliveInterval 600
ClientAliveCountMax 0

#----- 关闭X11转发,X11协议会存在安全漏洞
X11Forwarding no


如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Jin Yang, generated with Jekyll, and hosted on GitHub Pages
©2013-2018 – Jin Yang