SSH
SSH
安全外壳协议(Secure Shell Protocol,SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。
SSH 通用命令
无论是 win 还是 Linux 远程连接命令都是相同的。
1 | ssh [-P <port>] <user>@<addr> |
默认端口 22 。
密钥
现代加密技术常常使用非对称加密,当发送者使用私钥对一段信息加密后,接收者可使用公钥来快速解密。ssh 也可以使用这种加密方式来验证身份。
1 | cd ~/.ssh |
DSA- ❌ 已经从数学层面被证明不安全,所以永远不要用它
RSA- 在各种设备、各种 SSH 客户端中有广泛悠久的支持历史,且目前依然能提供够用的安全性。但它绝非唯一选择
ECDSA- ❗密钥小安全性高,但其算法被指留有 NSA 的后门,如果你的 VPS 上有值得 NSA 关注的东西就不要用它
Ed25519- 这是一个与 ECDSA 十分类似的算法,故具有相似的性能优势。同时其文档全部公开,所以普遍认为无后门
Linux 中 SSH 的使用
添加私钥
1 | eval 'ssh-agent' |
注意,仅对本次登录有效,笔者将其添加进启动文件了。
添加公钥
1 | mkdir ~/.ssh/ |
❗若文件权限不正确,系统认为文件不安全进而不使用密钥认证。
Windows 中 SSH 的使用
win 果然是最难配置的系统
添加私钥
-
方法一: 配置文件
配置 ‘~/.ssh/config’ 文件
1
2
3
4
5
6Host github
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa
ProxyCommand connect -S 127.0.0.1:5411 %h %p -
方法二: ssh-agent
爱来自微软官方文档
1
2
3
4
5
6
7# 将 ssh-agent 服务配置为在每次重启计算机时自动启动
Get-Service ssh-agent | Set-Service -StartupType Automatic # 需要管理员权限
Start-Service ssh-agent
Get-Service ssh-agent
# 添加私钥
sudo ssh-add $env:USERPROFILE\.ssh\general_ed25519
笔者实在是没弄明白,懒得弄了😓
添加公钥
若要使用密钥,还需要在服务器上将公钥(~.ssh\id_Ed25519.pub)的内容放入文本文件中。文件的名称和位置取决于用户帐户是本地管理员组的成员还是标准用户帐户。
-
普通用户
需要放入 C:\Users\username.ssh\authorized_keys 的文本文件中。
1
2
3$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"
ssh username@domain1@contoso.com $remotePowershell # 自行更改远程目标 -
管理员
需要放入 C:\ProgramData\ssh\administrators_authorized_keys 的文本文件中。
1
2
3$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '''$authorizedKey''';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""*S-1-5-32-544:F"" /grant ""SYSTEM:F"""
ssh username@domain1@contoso.com $remotePowershell # 自行更改远程目标一种不规范的简单方法:(只有这个方法成功了😓 垃圾微软文档)
修改服务器配置文件[C:\ProgramData\ssh\sshd_config]。将下述文本注释掉。1
2#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys然后按照普通用户操作。
