登录日志 /var/log/secure
登录失败

|     时间      |   主机    |   进程号    |    连接信息    | 
Apr 10 21:15:39 [localhost] sshd[31487]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.4.7  user=root
Apr 10 21:15:39 [localhost] sshd[31487]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Apr 10 21:15:41 [localhost] sshd[31487]: Failed password for root from 192.168.4.7 port 38674 ssh2

登录成功
接受来自 192.168.4.7 端口 38674 的密码,并为 root 开启了会话。

Apr 10 21:16:38 [localhost] sshd[31487]: Accepted password for root from 192.168.4.7 port 38674 ssh2
Apr 10 21:16:38 [localhost] sshd[31487]: pam_unix(sshd:session): session opened for user root by (uid=0)

sshd 配置文件 /etc/ssh/sshd_config

Port 12351 #配置端口默认是 22
PermitRootLogin yes #是否拒绝 root 登录,默认是 no
PasswordAuthentication no #配置不允许用密码登录,默认设置为 yes
PubkeyAuthentication yes #默认允许公钥连接(无需密码)

ssh 连接过程
连接会服务端会将公钥指纹信息显示让你确认是否要连,因为你无法确认对方服务器公钥是不是被调包,输入 yes 就会把服务端公钥写到用户家目录中 ~/.ssh/known_hosts 这个文件里,下次再登录就不会警告了,之后就是输入密码进行登录。
如果服务端系统重装或者它 IP 交给其他机器使用,本地就会连接不上服务端,因为服务端私钥解不开本机公钥连接时传输的加密信息,这种情况直接把 known_hosts 清空就好了,因为你不知道那条才是服务端对应的公钥。

SSH-账号密码登录方式.jpeg

ssh -l user -p prot
root@gbb:~# ssh 192.168.1.152
The authenticity of host '192.168.1.152 (192.168.1.152)' can't be established.
ECDSA key fingerprint is SHA256:H1Ix1eEHkMrbGCT1blsjIIFhOqTIOlmcP2jIyN7QU2k.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.152' (ECDSA) to the list of known hosts.
root@192.168.1.152's password: 
Last login: Tue Mar 26 15:52:20 2019 from 192.168.1.85
[root@centos7 ~]# 

免密码登录,复制公钥到服务器。
1.申请公私钥

root@gbb:~/.ssh# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #输入秘钥目录,默认在 /root/.ssh/
Enter passphrase (empty for no passphrase): #输入私钥密码,不需要密码就回车
Enter same passphrase again: #重复刚才输入密码,前面没有设置,就默认回车为空。
Your identification has been saved in /root/.ssh/id_rsa. #私钥路径
Your public key has been saved in /root/.ssh/id_rsa.pub. #公钥路径
The key fingerprint is:
SHA256:CgCEnFhKBqOKLaySSTaEsFdodRC8NcsTV2JfrbyjfnI root@gbb
The key's randomart image is:
+---[RSA 2048]----+
|@=o+=o. o.. ..   |
|OBo...+..o .  .  |
|=oo  + =  .. .   |
|=o .. +     o    |
|+=. .  .S    .   |
|++.  . .    o    |
|=     .    . .   |
|.         o E    |
|         ..+     |
+----[SHA256]-----+
root@gbb:~/.ssh# ls # id_rsa 是私钥  id_rsa.pub 是公钥
id_rsa  id_rsa.pub

申请完公私钥后,把公钥传到服务端。
把公钥放到用户家目录 .ssh 目录下,没有 .ssh 目录建一个,公钥在哪个用户家目录就能免密码登录,系统上每个用户都可以防止免密登录。

`AuthorizedKeysFile      .ssh/authorized_keys`是配置文件中要求这样写。  
scp 公钥 user@address:/root/authorized_keys
将 autorized_keys 放到 .ssh 中这个用户就能直接连接
chmod 700 .ssh #不能让其他人查看。
authorized_keys #文件只能是用户自己可以读写,如果有问题也要改。

这是条更优雅的写法
因为 cat >> .ssh/authorized_keys 会直接从标准输入设备中获取内容,这时候把它从标准输入重定向到文件上,就说数据从 .ssh/authorized_keys' < ~/.ssh/id_rsa.pub 来,就相当于 cat ~/.ssh/id_rsa.pub >> .ssh/authorized_keys

ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

2.复制公钥到服务器上
使用 ssh-copy-id 会自己在服务端创建目录(如果没有的话)和更改文件名。
输入 ssh-copy-id 和地址会让你输入密码,如果用户有权限写到目录中就能连接。

ssh-copy-id [-p] username@address

SSH-公钥登录方式.jpeg

保证SSH安全思路:

  1. 禁用 root 用户登录(防止爆破),给工作人员部分 sudo 权限。
  2. 连接到堡垒机进行操作,可以配置权限,限制危险指令执行,对应的指令会被记录下来方便调查。
  3. 设置 /etc/ssh/sshd_config 中登录次数
  4. 加快应急响应速度
  5. 改端口(还是可以扫出来)
  6. 使用私钥登录服务器来避免 SSH 爆破。

参考链接

标签: none

讨论讨论讨论!