SSH 常用技巧

2017-03-27 linux security ssh

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

环境变量

对于 OpenSSH 来说,首先需要在 /etc/ssh/sshd_config 中配置服务端能接受的环境变量,默认如下,重启之后生效。

AcceptEnv LANG LC_*

使用客户端时,可以通过 SendEnvSetEnv 发送环境变量。

$ ssh -o 'SetEnv EnvName=EnvValue' your.server.com
$ EnvName=EnvValue ssh -o 'SendEnv EnvName' your.server.com

双因子验证

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: 

SCP

这 OpenSSH 工具集中比较常用的工具,可以用来复制文件、目录等,但是几乎没有完整的文档介绍该协议,老版本默认使用 SCP 协议,比较新的会使用 SFTP 协议,如果要使用老的协议可以添加 -O 参数。

安全加固

通过 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