# SSH<no value>

##### 安装SSH(可选,多数Debian默认已经安装)
Step 1:更新本地软件库&安装SSH
```
apt-get update
apt-get install ssh
apt-get install openssh-server
```
##### 允许用户 `root` 登录(可选,如果`root`不可登录时)

```
vi /etc/ssh/sshd_config
```
将```/etc/ssh/sshd_config```中#PermitRootLogin更改为 PermitRootLogin yes，修改完毕后，按esc键,输入:wq后按enter键执行保存。

Step 3:重启SSH服务
```
service ssh restart
```

### 使用密钥登录
原理（SSH 公钥验证机制）
登录时不传递密码，而是使用一对「非对称金钥」：
- 一把叫做：公钥（Public Key）:存在你的电脑上(WindTerm/Putty/本机)
- 一把叫做：私钥（Private Key）: 存放在服务器上(~/.ssh/authorized_keys)


##### Step 1: 建立 `.ssh`目录并设定授权
```
mkdir -p ~/.ssh && chmod 700 ~/.ssh
```

##### Step 2: 在软件 `PuTTYgen` 生成金钥
生成金钥建议: 
- 在 `Type of key to generate:` 中选择 `EdDSA`
- 在 `Cuve to use for generating this key:` 后选择 `Ed25519(255 bits)`
- (可选)如果你想保护私钥,还可以在 `Key Passphrase:` 和 `Confim passphrase` 中输入密码,使用SSH客户端登录时会用到此密码.
- 最后点击 Generate
##### Step 3: 并将公钥内容贴在 Debian 上,并设定权限

复制 Putty Key generator 软件上 `Key`中 `Public key for pasting into OpenSSH authorized keys file:` 下面的内容后,在Debian中输入
```
vi ~/.ssh/authorized_keys
```
清空该文件所有内容,最后按 `i` 再按`鼠标右键`贴上之前的公钥内容.
最后按 `Esc` 后输入 `:wq!` 后按`Enter`键

最后在Debian上更改更改权限

```
chmod 600 ~/.ssh/authorized_keys
```


### 其他问题:
##### SSH 服务器是否允許金钥登录？
查看 `/etc/ssh/sshd_config` 中的這些設定是否正確：

```ini
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
```

可用下面命令确认(直接查关键字):
```bash
grep -Ei 'pubkey|authorizedkeysfile' /etc/ssh/sshd_config
```

如有修改,需要重启SSH:
```bash
systemctl restart ssh
```

##### 如果我使用用户 `root`私钥登入，可以被看出來嘛?
可以,在 Debian 上，登入时的 SSH 金钥记录会被记录在系统日志中,你可以这样查看:
```bash
journalctl -u ssh
```
或者:
```bash
grep "Accepted publickey" /var/log/auth.log
```

如果只想看用户 `root` 的 `登入成功`日志:
```bash
journalctl -u ssh | grep "Accepted" | grep "root"
```

日志中的关键字含义:

|日志内容|说明|
|---|---|
|Accepted password for root|表示用 密碼 登入|
|Accepted publickey for root|表示用 SSH 金鑰 登入|
|Failed password for root|表示密碼登入 失敗|
|Authentication refused|拒絕登入（可能因金鑰不符、無權限等）|


### 禁用密码登录
使用下面命令查看当前SSHD配置是否接受密码登录
```bash
grep -Ei 'pubkey|authorizedkeysfile' /etc/ssh/sshd_config
```
禁用密码登录

```
vi /etc/ssh/sshd_config
```

将 `PasswordAuthentication yes` 更改为 `PasswordAuthentication no`

然后重启SSHD服务
```bash
systemctl restart ssh
```