SSH

Eric讨论 | 贡献2022年12月15日 (四) 03:33的版本 →‎Linux

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

在设计上,SSH是Telnet和非安全shell的替代品。Telnet和Berkeley rlogin、rsh、rexec等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击。SSH旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。不过,SSH也被指出有被嗅探甚至解密的漏洞。

简介

时间轴

SSH服务器安装

Linux

一般服务器操作系统会默认安装SSH服务器,桌面操作系统则不会,如Ubuntu服务器版默认安装,Ubuntu桌面版未安装,需要下载安装,以Ubuntu系统安装OpenSSH Server为例:

sudo apt update  # 更新系统软件源
sudo apt install openssh-server


# 查看转态
sudo service sshd status

了解更多 >> Ubuntu 服务器文档:OpenSSH Server


Windows

使用 Windows 设置来安装 OpenSSH:

  • 打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能” 。
  • 查找“OpenSSH 服务器”,再单击“安装”


使用 PowerShell 安装 OpenSSH:

# 查找OpenSSH.Client, OpenSSH.Server组件
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

# 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 启动
Start-Service sshd
# 建议设置自动启动
Set-Service -Name sshd -StartupType 'Automatic'

# 查看状态
get-Service sshd

了解更多 >> Windows Server 文档:安装 OpenSSH


快速入门

SSH登录

密码登录

操作系统一般都会自带ssh客户端OpenSSH,在LinuxWindows的命令行输入:

# 查看 SSH client版本
ssh -V

# 以某个用户登录到某IP电脑
ssh username@192.168.1.200

常见问题

  • 首次登录时出现“所选的用户密钥未在远程主机上注册”。

可以在服务器上查看密钥的指纹,对比两者是否相同,防止受到中间人攻击。

# 列出服务器ssh密钥文件
ls -al /etc/ssh/*pub

# 查看rsa密钥指纹
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub | awk '{print $2}'
# 查看ECDSA密钥指纹
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'

Windwos下:

ls C:/ProgramData/ssh/

# 查看ECDSA密钥指纹
ssh-keygen -lf C:/ProgramData/ssh/ssh_host_ecdsa_key.pub

# 查找全部
ssh-keyscan localhost | ssh-keygen -lf -


密钥登录

生成公钥和私钥

在本地电脑使用ssh-keygen命令,默认使用rsa算法。输入命令后第一次询问保存位置,回车保存默认位置即可。第二询问钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。

ssh-keygen

# Enter file in which to save the key
# 私钥保存位置,直接回车默认位置和名称,也可以保存其他文件:
C:\Users\用户名/.ssh/computer_1

# Enter passphrase (empty for no passphrase):
# 询问是否设置钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。

了解更多 >> OpenBSD 文档:ssh-keygen - OpenSSH 认证密钥工具


服务器导入公钥

部署公钥,将公钥.pub文件内容导入指定文件,使OpenSSH能使用。

  • Linux:服务器用户目录下~/.ssh/authorized_keys 文件,如:/home/你的用户名/.ssh/authorized_keys
  • Windows:管理员权限的用户,服务器的C:\ProgramData\ssh\administrators_authorized_keys文件。普通权限用户,服务器用户目录下.ssh/authorized_keys 文件,如:C:\Users\你的用户名\.ssh\authorized_keys,如果你的用户名是管理人员权限,默认会读取administrators_authorized_keys公钥文件,未配置会出现 Permission denied (publickey,keyboard-interactive).错误。

导入示例:

# Linux 服务器在用户目录下创建.ssh
mkdir .ssh

# Linux 导入示例,本地电脑操作,将本地生成的公钥id_rsa.pub复制到服务器authorized_keys
scp C:\Users\username/.ssh/id_rsa.pub user2@46.100.162.172:/home/user2/.ssh/authorized_keys

# Windows 导入示例,本地电脑操作,
scp C:\Users\用户名\.ssh\computer_1.pub user_admin1@192.168.1.100:C:\ProgramData\ssh\administrators_authorized_keys
scp C:\Users\用户名\.ssh\computer_1.pub user1@192.168.1.100:C:\Users\用户名\.ssh\authorized_keys

了解更多 >> Windows Server 文档:OpenSSH 密钥管理/部署公钥


服务器可选配置

OpenSSH 服务器默认情况下读取从sshd_config中读取配置数据。也可以通过使用 -f 参数启动 sshd 来指定不同的配置文件。sshd_config默认位置如下:

  • Linux:/etc/ssh/sshd_config
  • Window:%programdata%\ssh\sshd_config,如C:\ProgramData\ssh\sshd_config

修改服务器 sshd 的配置文件后保存,重启ssh服务即可生效,Linux使用service ssh restart重启,Windows使用restart-Service sshd重启。

常用的配置如下:

# 禁止用密码登录
PasswordAuthentication no

了解更多 >> Windows Server 文档:OpenSSH 服务器配置


客户端登录设置

当使用默认名称的密钥id_rsa,可以不配置,直接登录,如:

ssh user@46.100.162.172

如果多个密钥对,登录多台服务器,可以在~/.ssh/config文件中设置服务器对应的认证密钥文件,如:

Host 46.100.162.172
  Hostname 46.100.162.172
  User user
  IdentityFile /home/yourname/.ssh/ali_rsa

Host tenxun
  Hostname 11.100.162.172
  User ubuntu
  IdentityFile /home/yourname/.ssh/tenxun_rsa

常见登录错误

Permission denied (publickey,keyboard-interactive)

Windows常见错误,解决办法:

  • 1.如果用户属于管理员组的成员,需要将公钥内容放置在C:\ProgramData\ssh\administrators_authorized_keys文件中。
  • 2.配置文件C:\ProgramData\ssh\sshd_config中设置StrictModes no并保存。
  • 3.重启sshd服务:restart-Service sshd

了解更多 >> Windows Server 文档:OpenSSH 密钥管理/部署公钥 OpenBSD 文档:sshd - OpenSSH 服务器


客户端软件

名称 支持系统 描述 官网
GNOME Terminal Linux GNOME桌面自带终端,如Ubuntu中的终端软件。可以设置多个配置文件,从而可以快速启动应用或登录不同服务器。
Windows Terminal Windows 微软开源的一款终端软件。支持命令提示符、PowerShell和WSL等shell。可以设置多个配置文件。 官网:https://docs.microsoft.com/zh-cn/windows/terminal/
源代码:https://github.com/Microsoft/Terminal
PuTTY https://www.chiark.greenend.org.uk/~sgtatham/putty/
XShell https://www.netsarang.com/zh/xshell/


资源

网站

相关教程

相关文章